我正在努力处理一些嵌套列表。 简短地说,在列表列表中,我有一些包含多个值的列表
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'
。
那么这是什么问题呢? 我不能使用列表索引,因为我的真实列表很大并且目标值并不总是在同一位置。 我已经检查了其他问题,但没有任何效果。 谢谢大家!
答案 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 answer与list 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']]]