检查Python中另一个列表中列表位置的最有效方法
问题描述:
这不是关于如何做的问题,而是关于如何更有效地做到这一点的问题。我有2个列表,一个包含来自子列表的所有元素和更多元素的superList。让我们在下面的列表,例如:检查Python中另一个列表中列表位置的最有效方法
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元素的存在,在某种程度上,我有一个列表,并回答诸如:
[0, 0, 1, 1, 0, 1, 0, 1, 0, 0]
我有这样的代码这里对短列表和少量ob子列表做的工作很好,但是一旦数据大小开始增加,就会变得效率低下。哪种解决方案比下面的解决方案更有效。记住,我想运行这个代码,对longList中的shortList进行大量的检查。这是一个嵌套在内部的情况:
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
答
列表理解在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 if _ in b else 0 for _ in a]
性能是O(nm)的其中n是a的大小和M是B的大小。你可以得到一个O(n)的解决方案,如果你使短名单成为'set' –
语法明智,你可以只为'我在longList:如果我在shortList:'等 – ryugie
如何列表解析? –