首页 > 解决方案 > 根据python中内部嵌套元素是否相同创建新列表

问题描述

如果起始列表中的元素满足某些条件,我试图找到一种从嵌套起始列表(list1)创建新列表(list2)的方法。起始列表是这样的,

list1=[[['1','1'],['1','2']], [['2','1'],['2','3']], [['3','3'],['3','1']]]

我想将 list1 中的所有元素添加到一个新列表中,该列表由至少有 1 个具有相同编号的嵌套元素的元素组成。例如,第一个和第三个元素 ([['1','1'],['1','2']][['3','3'],['3','1']]) 都至少有一个嵌套元素 ( ['1','1'] and ['3','3']) 具有相同的编号,第一个中的 1 和 1 ,另一个中的 3 和 3 。因此,新列表将包含 list1 中的第一个和第三个元素。

新列表应该是,

list2=[[['1','1'],['1','2']], [['3','3'],['3','1']]]

我的想法是这样接近它,

list2=[]
for i in list1:
    for i in i:
        if i[0]==i[1]:
            list2.append(i)

然而,这只给出了,

list2=[['1','1'], ['3','3']]

这不正是我想要的。任何有关如何解决此问题的帮助,或者如果有更好的方法,将不胜感激。

标签: pythonlistnested

解决方案


更改您的第二个循环变量,您将覆盖内部循环中外部循环计数器的值:

for i in list1:
    for j in i:
        if j[0] == j[1]:
            list2.append(i)

如果内部列表有超过 1 个元素,您可以通过以下方式检查所有元素是否相同:len(set(j)) == 1

此外,如果列表满足条件一次,您应该break从内部循环开始,否则您最终会重复,如果它包含具有相同值的多个内部列表,则一次又一次地插入相同的列表。


推荐阅读