据我所知,这个问题(令人惊讶的是?)以前没有被问过 - 除非我因为缺乏经验而没有发现同样的问题。 (类似的问题有 被问及1D清单)
我有一个list_A,其中包含int值。 我想从list_of_lists中删除List_A中指定的所有值的所有出现。作为一个新手编码器,我可以在这里使用列表推导和循环来共同破解一些东西,但鉴于我已经读到了从列表中删除元素的低效率,我正在寻找更有经验的用户关于最快速的方法的建议。
list_of_lists= [
[1,2,3,4,5,6,8,9],
[0,2,4,5,6,7],
[0,1,6],
[0,4,9],
[0,1,3,5],
[0,1,4],
[0,1,2],
[1,8],
[0,7],
[0,3]
]
更多信息
最后但并非最不重要(感谢RemcoGerlich提请注意这一点) - 我需要从列表列表中删除空的子列表
非常感谢
答案 0 :(得分:1)
使用列表理解应该如下:
new_list = [[i for i in l if i not in list_A] for l in list_of_list]
之后,如果要删除空列表,可以进行:
for i in new_list:
if not i:
new_list.remove(i)
正如@ferhatelmas在评论中指出的那样:
new_list = [i for i in new_list if i]
为避免list_A
中的重复,您可以使用list_A = set(list_A)
答案 1 :(得分:0)
我编写了一个只需要一个列表(或可迭代)和一个集合的函数,并返回一个新列表,其中删除了集合中的值:
def list_without_values(L, values):
return [l for l in L if l not in values]
然后我将list_A转换为快速检查集,并循环遍历原始列表:
set_A = set(list_A)
list_of_lists = [list_without_values(L, set_A) for L in list_of_lists]
应该足够快,可读性是最重要的。