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我建议您使用小写函数名