我有以下代码可以正常工作,我想知道如何使用列表理解来实现相同的逻辑。
def get_features(document, feature_space):
features = {}
for w in feature_space:
features[w] = (w in document)
return features
我是否可以通过使用列表推导来改善性能?
问题是feature_space
和document
都相对较大,并且会运行很多迭代。
修改:很抱歉,一开始就没有说清楚,feature_space
和document
都是列表。
document
是一个单词列表(一个单词可能不止一次存在!)feature_space
是标签(功能)列表答案 0 :(得分:3)
像这样,使用 dict comprehension :
def get_features(document, feature_space):
return {w: (w in document) for w in feature_space}
features[key] = value
表达式在开始时变为key: value
部分,其余for
循环和任何if
语句遵循嵌套顺序。< / p>
是的,这会为您带来性能提升,因为您现在已经删除了所有features
本地名称查询和dict.__setitem__
来电。
请注意,您需要确保document
是具有快速成员资格测试的数据结构。如果它是一个列表,例如,首先将其转换为set()
,以确保成员资格测试需要O(1)(常量)时间,而不是列表的O(n)线性时间:
def get_features(document, feature_space):
document = set(document)
return {w: (w in document) for w in feature_space}
使用set
,现在是O(K)循环而不是O(KN)循环(其中N是document
的大小,K
大小为{ {1}}。