私はこれをdata
(小文字)としています。これをスクリプトにインポートします。Pythonで名前でデータを分類する
LastName StartTime EndTime Duration Period TeamAbbrev Position
Bouwmeester 0:00 0:37 0:37 1 STL D
Schwartz 0:00 0:40 0:40 1 STL W
Foligno 0:00 0:40 0:40 1 MIN W
Pietrangelo 0:00 0:48 0:48 1 STL D
Suter 0:00 0:40 0:40 1 MIN D
Staal 0:00 0:40 0:40 1 MIN C
Niederreiter 0:00 0:40 0:40 1 MIN W
Allen 0:00 20:00 20:00 1 STL G
Steen 0:00 0:30 0:30 1 STL W
Tarasenko 0:30 1:27 0:57 1 STL W
Parayko 0:37 1:43 1:06 1 STL D
これは、スクリプト
import csv
from itertools import combinations, product
#Header = LastName StartTime EndTime Duration Period TeamAbbrev Position
#Import Game
with open('2017020397.csv', newline='') as f:
next(f)
skaters = '\n'.join(' '.join(row) for row in csv.reader(f))
data = skaters.splitlines()
def to_secs(ms):
''' Convert a mm:ss string to seconds '''
m, s = map(int, ms.split(':'))
return 60 * m + s
# Store a list of (start, end) times for each player
players = {}
for row in data:
name, start, end = row.split(None, 3)[:3]
times = to_secs(start), to_secs(end)
players.setdefault(name, []).append(times)
for t in players.items():
print(t)
print()
# Determine the amount of overlapping time for each combination of players
for p1, p2, p3 in combinations(sorted(players), 3):
total = 0
# Check each pair of times for this pair of players
for t1, t2, t3 in product(players[p1], players[p2], players[p3]):
# Compute the overlap in this pair of times and
# add it to the total for this pair of players
start, end = zip(t1, t2, t3)
total += max(0, min(end) - max(start))
if total:
print(p1, p2, p3, total)
出力されます。
Allen Niederreiter Pietrangelo 5481
Allen Niederreiter Prosser 2088
Allen Niederreiter Reilly 1464
これの目的は、お互いに演奏どのようなチームメイトを確認することです。 Output
から、Allen
からSTL
までがNiederreiter
と一致することがわかります。MIN
からです。私はチームcombinations
のように結合するだけです。 TeamAbbrev
はその識別方法です。もう1つの規定は、TeamAbbrev
が、そのチームがその夜に何をしているかによって、ゲームによってゲームを変えるというものです。任意のすべての提案に開いて、ありがとう!
編集:int()
がTeamAbbrev
のstr()
よりも簡単な場合は、数字の代わりにteamId
を削り取ることができます。
基本的に**複数の異なるプレイヤーを名前で、チームごとに**印刷するだけですか? 1つのチームが1つのチームを意味するように、 – IMCoins
私は、 'Allen'と' Niederreiter'の例のように、スクリプトが反対のプレイヤーを一緒にペアリングしないことを除いて、 'Output'が同じであると考えました。 –
後にplayers.setdefaultsをもう一度player.setdefaultsし、今回はrow.split()ではなくindex [4]の上に同じリストに追加し、各プレイヤーのteamAbbrevを比較します。 行開始、終了、teamAbbrev = zip(t1、t2、t3)に行を追加できます。 それまでにすべてのチーム略語にアクセスできます。それは十分にあなたを助けますか? 次に、if total:を変更して、teamAbbrevの一致を確認する条件を1つ以上追加します。 – IMCoins