如果嵌套列表在索引处包含数字,则删除嵌套列表

时间:2020-07-30 18:09:50

标签: python-3.x list list-comprehension typeerror nested-lists

如果嵌套列表在特定索引处包含特定数字,我想删除数字的嵌套列表。

示例列表列表:

permutations_list = [[9, 7, 14, 4, 2, 10], [9, 7, 2, 10, 14, 4], [9, 7, 2, 10, 4, 14], [9, 7, 2, 14, 10, 4], [9, 7, 2, 14, 4, 10], [9, 7, 2, 4, 10, 14], [9, 7, 2, 4, 14, 10], [9, 7, 4, 10, 14, 2], [9, 7, 4, 10, 2, 14], [9, 7, 4, 14, 10, 2], [9, 7, 4, 14, 2, 10], [9, 7, 4, 2, 10, 14], [9, 7, 4, 2, 14, 10]]

我要检查的是每个嵌套列表在索引4处是否都包含数字14。如果发生这种情况,请删除满足这些规范的所有嵌套列表,以得到以下列表:

permutations_list = [[9, 7, 14, 4, 2, 10], [9, 7, 2, 10, 4, 14], [9, 7, 2, 14, 10, 4], [9, 7, 2, 14, 4, 10], [9, 7, 2, 4, 10, 14], [9, 7, 4, 10, 2, 14], [9, 7, 4, 14, 10, 2], [9, 7, 4, 14, 2, 10], [9, 7, 4, 2, 10, 14]]

这是我尝试过的:

for i in permutations_list:
    for c in i:
        if c =='10' and c[4]:
            permutations_list.remove(i)

所有这些都会导致:

TypeError: 'int' object is not subscriptable

2 个答案:

答案 0 :(得分:1)

使用列表理解

例如:

permutations_list = [[9, 7, 14, 4, 2, 10], [9, 7, 2, 10, 14, 4], [9, 7, 2, 10, 4, 14], [9, 7, 2, 14, 10, 4], [9, 7, 2, 14, 4, 10], [9, 7, 2, 4, 10, 14], [9, 7, 2, 4, 14, 10], [9, 7, 4, 10, 14, 2], [9, 7, 4, 10, 2, 14], [9, 7, 4, 14, 10, 2], [9, 7, 4, 14, 2, 10], [9, 7, 4, 2, 10, 14], [9, 7, 4, 2, 14, 10]]
permutations_list = [i for i in permutations_list if not i[4] == 14]
print(permutations_list)

或使用filter

permutations_list = list(filter(lambda x: x[4] != 14, permutations_list))

输出:

[[9, 7, 14, 4, 2, 10],
 [9, 7, 2, 10, 4, 14],
 [9, 7, 2, 14, 10, 4],
 [9, 7, 2, 14, 4, 10],
 [9, 7, 2, 4, 10, 14],
 [9, 7, 4, 10, 2, 14],
 [9, 7, 4, 14, 10, 2],
 [9, 7, 4, 14, 2, 10],
 [9, 7, 4, 2, 10, 14]]

答案 1 :(得分:0)

您只需循环浏览一次主列表,然后检查此列表中索引4处的元素是否为14。如果是14,请将其删除;否则,请不要执行任何操作。就像我在下面做的

for i in permutations_list :
   if i[4] == 14 :
      permutations_list.remove(i)