根据条件从嵌套列表中删除某些子列表

所以,我有一个嵌套列表(我们称它为A)。它的长度为2,应将它们视为单独的列表。我想分别遍历这2个,并删除长度不相等的子列表。例如,我希望我的输出与A相同,但要删除[['Table heading']],因为它的长度与其他嵌套列表的长度不同。

A=[[[['1'],['2'],['3'],['4']],[['x'],['y'],['z'],['w']],[['a'],['b'],['c'],['d']],[['11'],['22'],['33'],['44']]],[[['Table heading']],[['A'],['B'],['C'],['D']],[['X'],['Y'],['Z'],['W']],[['1'],['4']]]]

 output=[[[['1'],[[['A'],['4']]]]
c68654626 回答:根据条件从嵌套列表中删除某些子列表

[ y for x in A for y in x if len(y) == 4]

或以可读格式。

out = []
for inner in A:
     for inner_inner in inner:
          if len(inner_inner) == 4:
               out.append(inner_inner)

如果您不知道内部列表的大小,但是知道只有一个列表的大小不匹配,您可以这样做。

out = []
for inner in A:
     for inner_inner in inner:
         inner_size = len(inner_inner) 
         try:
             if inner_size == previous_size:
                 out.append(inner_inner)
          except NameError:
                  previous_size = inner_size
                  out.append(inner_inner)

这是默认设置,如果要删除第一个inner_inner元素,则将删除整个列表元素,而不是第一个。

或者这样

from collections import Counter

size = Counter([ len(y) for x in A for y in x ]).most_common(1)[0][0]
[ y for x in A for y in x if len(y) == size]

此解决方案在整个列表上循环两次,具体取决于列表大小,这可能是一个限制。

,

检查一下。除非元素不再列出,否则它将删除该元素。


def  delete_odd(A):
    if isinstance(A[0],list)==False:
        return
    def delete_elem(a,if_not):
        print(a,'  ',if_not,'   ')

        i = 0
        while i<len(a):
            if len(a[i])!=if_not:
                del a[i]
            else:
                i+=1

    if len(A)<=2:
        pass
    else:
        n1 = len(A[0])
        n2 = len(A[1])
        n3 = len(A[2])
        if n1==n2:
            n = n1
        elif n2==n3:
            n = n2

        delete_elem(A,if_not=n)
    i = 0
    while i<len(A):
        delete_odd(A[i])
        i+=1




A = [[[['1'],['2'],['3'],['4']],[['x'],['y'],['z'],['w']],[['a'],['b'],['c'],['d']],[['11'],['22'],['33'],['44']]],[[['Table heading']],[['A'],['B'],['C'],['D']],[['X'],['Y'],['Z'],['W']],[['1'],['4']]]]
delete_odd(A)

print(A)
#output
[[[['1'],[[['A'],['4']]]]
本文链接:https://www.f2er.com/3155689.html

大家都在问