这不是关于如何做的问题,而是关于如何更有效地做到这一点的问题。我有2个列表,一个superList,它包含subList中的所有元素和更多的元素。让我们举例如下:
a = [0,1,2,3,4,5,6,7,8,9] # a is my superList
b = [2,3,5,7] # b is my subList
我想以某种方式检查b中哪些b元素存在,并且回答如下:
[0, 0, 1, 1, 0, 1, 0, 1, 0, 0]
我这里有这个代码,它可以很好地用于短列表和少量的ob子列表,但是一旦数据大小开始增加就会效率低下。哪种解决方案比下面的解决方案更有效。请记住,我想运行此代码,以便对longList中的shortList进行大量检查。它是嵌套在for a情境中的:
def isInList(longList, shortList):
indexList = []
for i in range(len(longList)):
if longList[i] in shortList:
indexList.append(1)
else:
indexList.append(0)
return indexList
答案 0 :(得分:4)
列表理解在Python中非常有效。检查O(n)的快捷方法是:
[1*(aa in b) for aa in a]
# returns:
[0, 0, 1, 1, 0, 1, 0, 1, 0, 0]
更高效的是将b
转换为集合,因为检查集合中的存在是否为O(1)。
b_set = set(b)
[1*(aa in b_set) for aa in a]
# return:
[0, 0, 1, 1, 0, 1, 0, 1, 0, 0]
答案 1 :(得分:0)
另一种方法是:
[1 if _ in b else 0 for _ in a]