【问题标题】:How to compare sublist of list with sublist of other list that are in same list of lists如何将列表的子列表与同一列表中的其他列表的子列表进行比较
【发布时间】:2020-05-08 22:45:25
【问题描述】:

我有一个列表列表,每个列表都有子列表,例如:

mylist = [[['AB','CD'],['GH','EF'],['IJ','KL'],['']],[['CD','AB'],['EF','GH'],['KL','IJ'],['']],[['EF','GH'],['CD','AB'],['IJ','KL'],['']],...]

列表数量为 1500 个,每个列表有 16 个子列表(以上仅为示例)。对于所有列表,我想要做的是将一个列表的子列表与另一个列表的子列表进行比较。更准确地说,我想比较 ['AB','CD'] 与 ['CD','AB'] 和 ['EF','GH'] 以及其余部分的第一个子列表列表。第二个子列表也是如此。我想检查他们是否有相同的项目,顺序无关紧要。所以 ['AB','CD'] 和 ['CD','AB'] 是一样的。但是我还需要找到哪些子列表包含 ['EF','GH'] 并在所有相同的子列表在一起时进行一些计算。 总而言之,我想检查一个列表的第一个子列表与每个列表的第一个子列表的其余部分,然后对每个子列表(第 2、3、4、..、第 15)执行相同的操作。 我想过做这样的事情

for i in range(0,len(mylist)):
        for j in range(i,len(mylist)):
            if mylist[i][j]==mylist[i + 1][j]:

但是当我这样做时它似乎不起作用。它给了我:

IndexError: 列表索引超出范围

我不知道我的方法是否正确。我试图搜索和理解,但找不到相关的东西。

所有子列表的长度相同。

【问题讨论】:

    标签: python list comparison sublist


    【解决方案1】:

    当 i 位于列表的最后一个位置时,您正在尝试访问列表范围之外的索引。你不需要去最后一个位置,它足够去倒数第二个位置和最后一个比较,像这样:

    for i in range(0,len(mylist)-1):
        for j in range(i,len(mylist[i])):
            if mylist[i][j]==mylist[i+1][j]:
                print('Found')
    
    

    【讨论】:

    • 我在 if 语句中放了一个 print("same") 语句,以查看它是否有效,它首先给我与以前相同的错误,然后将相同的单词打印 10 次或更多次并结束..
    • @piggy,我已经更改了代码。忘记了第二个的 i 索引。
    • 非常感谢!工作!
    • @piggy 因为答案解决了您的问题,请接受它 - 请参阅What should I do when someone answers my question?
    • 我现在正试图了解它是如何工作的,因为我看到它只给我结果,只有当子列表中的顺序相同时,我才能返回相同的结果,而我想返回它们是相同的,即使顺序不一样。正如我所见,它不起作用。我还在努力这就是为什么我还没有接受它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多