从Python的三重嵌套列表中获取最内层元素

5

我有一个列表:

players = [[['QB1',7000,20],['RB1',4500,12],['RB2',3800,11]], [['QB1',7000,20],['RB2',3800,11],['RB1',4500,12]]]

如何获取每个最内层列表的第一个元素(第一个“次要”列表中的 'QB1','RB1' 和 'RB2' ),以检查它们是否相同,但是标签被打乱,就像在另一个次要列表中一样(在这种情况下,两个次要列表都包含 'QB1','RB1' 和 'RB2')?

编辑:

我的期望输出是[['QB1','RB1','RB2'],['QB1','RB2','RB1']]。我想有一些方法来确认这些对于我的目的是相同的列表。


你想要的输出是什么?“内部元素”是什么意思? - Mehrdad Pedramfar
1
@mehrdad-pedramfar 很好的问题,我应该更清楚 - 我已经编辑了原始问题以包括我的期望输出。 - aaron
4个回答

10

你可以这样做:

output = [[i[0] for i in a] for a in players]

output的输出将会是这样:

[['QB1', 'RB1', 'RB2'], ['QB1', 'RB2', 'RB1']]

1
谢谢,我之前一直在试用[i[0] for i in a for a in players],不过现在我明白了你的解决方案与我的不同。 - aaron

3
你可以使用递归搜索来实现这个功能,获取每个列表的第一个元素或整个列表。
players = [[['QB1',7000,20],['RB1',4500,12],['RB2',3800,11]],[['QB1',7000,20],['RB2',3800,11],['RB1',4500,12]]]
def retrive_first(lst):
    for item in lst:
        if type(item) == list:
            retrive_first(item)
        else:
            print "returning ---> ", lst[0]
            return lst[0]

print retrive_first(players)

1
您也可以尝试这个:

from operator import itemgetter
[list(map(itemgetter(0), player)) for player in players]

0

做:

print(list(zip(players))[0])

或者:

print([i[0] for i in players])

第一个返回值为 ([['QB1', 7000, 20], ['RB1', 4500, 12], ['RB2', 3800, 11]],),第二个返回值为 [['QB1', 7000, 20], ['QB1', 7000, 20]] - aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接