列表比较/生成脚本的Pythonic方法

时间:2015-12-25 20:06:47

标签: python-3.x

考虑我有一个名为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? 更加压缩?

1 个答案:

答案 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)