从列表中删除元素,然后显示没有删除元素的列表

时间:2019-07-21 11:03:50

标签: python-3.x list nested

我有这个嵌套列表:

a = [[1, 3, 6, 11, 16, 21, 25, 28, 31, 32, 33, 34, 35, 36], 
     [1, 2, 5, 9, 15, 20, 24, 26, 30, 36], 
     [1, 3, 6, 11, 16, 21, 25, 29, 31, 32, 33, 34, 35, 36], 
     [1, 2, 4, 8, 14, 18, 23, 36], 
     [1, 2, 5, 9, 15, 20, 24, 27, 30, 36], 
     [1, 3, 6, 11, 16, 22, 25, 28, 31, 32, 33, 34, 35, 36], 
     [1, 3, 7, 12, 17, 36], 
     [1, 2, 4, 8, 14, 19, 23, 36], 
     [1, 2, 5, 10, 15, 20, 24, 26, 30, 36], 
     [1, 3, 6, 11, 16, 22, 25, 29, 31, 32, 33, 34, 35, 36], 
     [1, 2, 5, 10, 15, 20, 24, 27, 30, 36], 
     [1, 3, 6, 11, 16, 21, 25, 28, 31, 32, 33, 35, 36], 
     [1, 3, 6, 11, 16, 21, 25, 28, 31, 33, 34, 35,36], 
     [1, 3, 6, 11, 16, 21, 25, 29, 31, 32, 33, 35, 36]]

我需要选择嵌套列表中子列表的最大长度,而不是将子列表的项目与嵌套列表进行比较。如果子列表中的项目相等,则删除嵌套列表中的同一项目,并在最终打印嵌套列表中删除该项目。

1 个答案:

答案 0 :(得分:0)

希望我能正确理解您的问题。

您希望输入为:

a = [[1, 3, 6, 11, 16, 21, 25, 28, 31, 32, 33, 34, 35, 36], 
     [1, 2, 5, 9, 15, 20, 24, 26, 30, 36], 
     [1, 3, 6, 11, 16, 21, 25, 29, 31, 32, 33, 34, 35, 36], 
     [1, 2, 4, 8, 14, 18, 23, 36], 
     [1, 2, 5, 9, 15, 20, 24, 27, 30, 36], 
     [1, 3, 6, 11, 16, 22, 25, 28, 31, 32, 33, 34, 35, 36], 
     [1, 3, 7, 12, 17, 36], 
     [1, 2, 4, 8, 14, 19, 23, 36], 
     [1, 2, 5, 10, 15, 20, 24, 26, 30, 36], 
     [1, 3, 6, 11, 16, 22, 25, 29, 31, 32, 33, 34, 35, 36], 
     [1, 2, 5, 10, 15, 20, 24, 27, 30, 36], 
     [1, 3, 6, 11, 16, 21, 25, 28, 31, 32, 33, 35, 36], 
     [1, 3, 6, 11, 16, 21, 25, 28, 31, 33, 34, 35, 36], 
     [1, 3, 6, 11, 16, 21, 25, 29, 31, 32, 33, 35, 36]]

我们要删除

[1, 3, 6, 11, 16, 22, 25, 29, 31, 32, 33, 34, 35, 36]

[1, 3, 6, 11, 16, 21, 25, 29, 31, 32, 33, 34, 35, 36]

因为它们的长度相同。

输出应为:

a = [[1, 2, 5, 9, 15, 20, 24, 26, 30, 36], 
     [1, 2, 4, 8, 14, 18, 23, 36], 
     [1, 2, 5, 9, 15, 20, 24, 27, 30, 36], 
     [1, 3, 7, 12, 17, 36], 
     [1, 2, 4, 8, 14, 19, 23, 36], 
     [1, 2, 5, 10, 15, 20, 24, 26, 30, 36], 
     [1, 2, 5, 10, 15, 20, 24, 27, 30, 36], 
     [1, 3, 6, 11, 16, 21, 25, 28, 31, 32, 33, 35, 36], 
     [1, 3, 6, 11, 16, 21, 25, 28, 31, 33, 34, 35, 36], 
     [1, 3, 6, 11, 16, 21, 25, 29, 31, 32, 33, 35, 36]]

删除了以前的列表。

您的问题措词不明确,但我希望这是您想要的。这是代码:

# assume a is not empty
d = {} # list of the max length -> number of occurrences in 2d array

# find the length of the longest list
maxLen = len(a[0])
for l in a:
    if len(l) > maxLen:
        maxLen = len(l)

# add lists of the same max length and their count to the dictionary
for l in a:
    if len(l) == maxLen:
        #convert list to string because python does not support list being key of a dictionary
        l_string = str(l)
        if l_string in d:
            d[l_string] += 1
        else:
            d[l_string] = 1

# remove
for l_string in d:
    while d[l_string] > 0:
        # convert string back to list and remove
        a.remove(eval(l_string))
        d[l_string] -= 1

# test result if you want
for row in a:
    print(row)