从DEEP嵌套列表中删除子列表

时间:2019-12-13 11:38:15

标签: python-3.x nested-lists

我正在努力处理一些嵌套列表。 简短地说,在列表列表中,我有一些包含多个值的列表

biglist = [[['strings', '632'], ['otherstrings', 'hey']],[['blabla', '924'], ['histring', 'hello']]]

从此嵌套列表中,我想删除其中出现'hello'字符串的子列表。 我尝试过:

for sub_line in big_list:
    if 'hello' in sub_line:
        big_list.remove(sub_line)

现在,如果我在循环外打印新的big_list,则会得到旧列表,因为我没有将更新后的列表分配给新列表。但是,如果我分配给新列表,例如:

for sub_line in big_list:
    if 'hello' in sub_line:
        updated_list = big_list.remove(sub_line)
print(updated_list)

我得到一个AttributeError: 'NoneType' object has no attribute 'remove'

那么这是什么问题呢? 我不能使用列表索引,因为我的真实列表很大并且目标值并不总是在同一位置。 我已经检查了其他问题,但没有任何效果。 谢谢大家!

3 个答案:

答案 0 :(得分:0)

以下对我有用。您需要从列表中删除sub_line(而非line)。

big_list = [['strings', '632', 'otherstrings', 'hey'],['blabla', '924', 'histring', 'hello']]

print(big_list)
for sub_line in big_list:
    if 'hello' in sub_line:
        big_list.remove(sub_line)
print(big_list)

答案 1 :(得分:0)

for sublist in biglist:
      if 'hello' in sublist:
            updated_list=biglist.remove(sublist)
print(updated_list)

以上代码的输出为None,因为remove()不返回任何值,即返回None。因此,您不应该在列表中分配返回值remove()。 我认为,每当您使用updated_list时,都可能会引起一些问题。

答案 2 :(得分:0)

如果您经常有两个嵌套级别(不是我要标记为 DEEP 的嵌套),则可以将@pault的重复标记中的this answerlist flattening结合使用:< / p>

biglist = [[['strings', '632'], ['otherstrings', 'hey']],[['blabla', '924'], ['histring', 'hello']]]
token = 'hello'
smalllist = [x for x in biglist if not token in [j for i in x for j in i]]

# smalllist
# Out[17]: [[['strings', '632'], ['otherstrings', 'hey']]]
相关问题