Python 3.x用更快的速度替换循环

时间:2018-12-05 20:45:52

标签: python-3.x for-loop time lambda itertools

我试图产生一个向量,该向量表示字符串和列表元素的匹配。我在python3.x中做了一个函数:

def vector_build (docs, var):
    vector = []
    features = docs.split(' ')
    for ngram in var:            
        if ngram in features:
            vector.append(docs.count(ngram))
        else:
            vector.append(0)
    return vector

工作正常:

vector_build ('hi my name is peter',['hi', 'name', 'are', 'is'])
  

出局:[1、1、0、1]

但是此功能无法扩展到重要数据。当其字符串参数'docs'重于190kb时,它将花费更多时间。所以我试图用地图函数代替for循环:

var = ['hi', 'name', 'are', 'is']
doc = 'hi my name is peter'
features = doc.split(' ')
vector = list(map(var,if ngram in var in features: vector.append(doc.count(ngram))))

但这会返回此错误:

  

SyntaxError:语法无效

是否有一种方法可以将map,lambda和itertools的for循环替换为更快的执行速度?

1 个答案:

答案 0 :(得分:0)

您可以将列表理解用于此任务。另外,在一组功能中进行查找也应该会对功能有所帮助。

var = ['hi', 'name', 'are', 'is']
doc = 'hi my name is peter'
features = doc.split(' ')
features_set = set(features) #faster lookups
vector = [doc.count(ngram) if ngram in features_set else 0 for ngram in var] 
print(vector)