好的,我有两个列表,列表1和列表2.我想找到列表1和列表2中的所有项目,并从列表1中删除它们.我想到的第一种方法是循环通过列表1然后循环遍历列表2以查看它是否在列表2中,但在放大时看起来似乎缓慢且效率低下.有更有效的方法吗?
此外,这些列表将按字母顺序排列(它们是字符串),如果这有助于任何事情.
我正在使用python,但我也从一般的编程角度思考.
list1 = ['bar','foo','hello','hi']
list2 = ['alpha','bar','hello','xam']
Run Code Online (Sandbox Code Playgroud)
list1会成为 ['foo','hi']
在python中,你可能想要使用一个集合:
intersection = set(list1).intersection(list2)
Run Code Online (Sandbox Code Playgroud)
这将返回一个set销毁订单(以及其他内容),但您可以list1随后使用该集合进行过滤:
list1 = [x for x in list1 if x not in intersection]
Run Code Online (Sandbox Code Playgroud)
如果您确实想要使用该集合,则交集最有用.正如评论中指出的那样,如果你根本不想要一套,那就没有必要:
set2 = set(list2)
list1 = [x for x in list1 if x not in set2]
Run Code Online (Sandbox Code Playgroud)