考虑我有一个名为listuple
的2元组列表和另一个名为list0
的简单列表。我想基于比较我的两个给定列表来生成1
和-1
的列表。
def Vectomparison (listuple, list0):
result = []
for EachElement in listuple:
if EachElement [0] in list0:
result.append (1)
else:
result.append (-1)
return result
但我真的认为这不是Pythonic方法。是否有任何想法让 Python? 更加压缩?
答案 0 :(得分:2)
使用list comprehesion和三元运算符直接重写:
def Vectomparison (listuple, list0):
return [1 if item[0] in list0 else -1 for item in listuple]
请注意,如果item[0] in list0
是列表,list0
会使用线性搜索。这使得算法时间复杂度O(N*M)
,其中N = len(listuple), M = len(list0)
你可以加快速度:
def Vectomparison (listuple, list0):
set0 = set(list0)
return [1 if item[0] in set0 else -1 for item in listuple]
此版本的时间复杂度为O(N+M)