Python 3.x 列表比较/生成脚本的Pythonic方法
假设我有一个名为Python 3.x 列表比较/生成脚本的Pythonic方法,python-3.x,Python 3.x,假设我有一个名为listuple的2元组列表和另一个名为list0的简单列表。我想在比较两个给定列表的基础上生成1s和-1s的列表 def Vectomparison (listuple, list0): result = [] for EachElement in listuple: if EachElement [0] in list0: result.append (1) else: resul
listuple
的2元组列表和另一个名为list0
的简单列表。我想在比较两个给定列表的基础上生成1
s和-1
s的列表
def Vectomparison (listuple, list0):
result = []
for EachElement in listuple:
if EachElement [0] in list0:
result.append (1)
else:
result.append (-1)
return result
但我真的认为这不是一个蟒蛇式的方法。有什么想法可以使这个更压缩吗?使用列表压缩和三元运算符直接重写:
def Vectomparison (listuple, list0):
return [1 if item[0] in list0 else -1 for item in listuple]
请注意,如果list0
是一个列表,则list0中的项[0]使用线性搜索。这使得算法的时间复杂度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)
请问,在此类问题中,您如何估计/制定时间复杂度?列表上的线性搜索需要O(N)
步骤。在O(N*M)
算法中执行M
次生成。在第二个示例中,构建集合需要O(M)
时间(因为插入新元素是O(1)
),构建最终列表是O(N)
,因此总体上O(N+M)
@MerlotLatterian我建议您使用小写函数名