我正在做一个棒球项目,我正在尝试将来自两个不同 csv 文件的运动员姓名与其对应的统计数据相匹配
例如,我有两个如下所示的列表列表:
player_stats1 = [[Clayton Kershaw, stats, more stats, more stats]]
player_stats2 = [[Clayton Kershaw, stats, more stats, more stats]]
我有一个 if 语句来检查两个名称是否相同
if player_stats1[1][1] and player_stats1[1][2] == player_stats2[1][1] and player_stats2[1][2]:
print('True')
else:
print('false')
我需要检查名称是否相同以及它们是否从 players_stats2[1][0] and players_stats2[1][5] to the original list, players_stats1
我试过了
length1 = len(player_stats1)
players_stats3 = []
i = 1
while i < length1:
if player_stats1[1][i] and player_stats1[1][i + 1] == player_stats2[1][i] and player_stats2[1][i + 1]:
players_stats3.append(player_stats2[i][0], player_stats2[i][5])
else:
print('')
i += 1
但我不断收到错误消息。
IndexError: list index out of range
您有一个列表列表。所以改变你的索引方式。
# get the i-th list of player stats | [Clayton Kershaw, stats, more stats, more stats]
player_stats1[i]
# get the name in the i-th list of player stats
player_stats1[i][1]
在示例中,您将玩家名称作为第一个项目,因此如果这是正确的,则应该是以下内容以获取名称。
player_stats1[i][0]
例子
>>> lsts = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
>>> lsts[0][1] # first list, second item
2
你原来的 if 语句也有问题。
if player_stats1[1][1] and player_stats1[1][2] == player_stats2[1][1] and player_stats2[1][2]:
print('True')
else:
print('false')
如果您的列表都包含“真实”值,这将始终打印 True。相反,您需要比较两者。
player_stats1[1][1] == player_stats2[1][1] and player_stats1[1][2] == player_stats2[1][2]
备择方案:
您还可以使用zip
将您的列表组合在一起并同时遍历它们。
player_stats1 = [ ["A", "B"], ["A", "C"], ["D", "A"], ["E", "E"]]
player_stats2 = [ ["A", "A"], ["D", "A"], ["A", "C"], ["E", "E"]]
res = []
for p1, p2 in zip(player_stats1, player_stats2):
if p1[0] == p2[0] and p1[1] == p2[1]:
res.append( (p2[0], p2[1]) )
print(res)
缺点zip
是:
如果要查找所有匹配项,则需要循环比较每个匹配项。
res = []
for p2 in player_stats1:
for p1 in player_stats2:
if p1[0] == p2[0] and p1[1] == p2[1]:
res.append( (p2[0], p2[1]) )
print(res)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句