在列表列表中匹配

奥斯汀·约翰逊

我正在做一个棒球项目,我正在尝试将来自两个不同 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是:

  1. 您的列表大致相同,否则较小的将成为 zip 的最终长度,因为您将无法与较长列表的其余部分配对。
  2. 这只会将它们与相应索引处的项目进行比较。

如果要查找所有匹配项,则需要循环比较每个匹配项。

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用python在列表列表中查找匹配值

来自分类Dev

在Python的列表列表中查找部分匹配项

来自分类Dev

创建和使用列表列表列表:在Python中

来自分类Dev

Scala中列表列表的模式匹配

来自分类Dev

列表列表中列表的组索引

来自分类Dev

将列表部分匹配到列表列表

来自分类Dev

Python:从列表列表中删除列表?

来自分类Dev

从列表列表中引用列表

来自分类Dev

列表列表中的Pandas系列列表

来自分类Dev

列表列表中的排列

来自分类Dev

列表列表中的组合

来自分类Dev

列表列表中的改组对

来自分类Dev

在列表列表中追加列表-Haskell

来自分类Dev

在列表列表中获取对

来自分类Dev

如何遍历列表列表列表列表列表... Python中的坐标对列表列表?

来自分类Dev

为R中的列表列表中的列表提供正确的匹配项

来自分类Dev

从列表列表中减去列表

来自分类Dev

使用python在列表列表中查找匹配的值

来自分类Dev

Libreoffice中的表列表

来自分类Dev

创建和使用列表列表列表:在Python中

来自分类Dev

scala中的列表列表

来自分类Dev

Pop()列表列表中列表的元素

来自分类Dev

python中列表(列表列表)中列表的交集

来自分类Dev

访问for中的列表列表

来自分类Dev

更改列表列表中的元素以匹配 python 中的不同列表

来自分类Dev

方案中的列表列表

来自分类Dev

在列表列表中搜索

来自分类Dev

列表列表中的路径

来自分类Dev

Python中列表列表的列表理解