【发布时间】:2019-10-26 11:44:42
【问题描述】:
我正在尝试寻找最有效的方法来构建两个带有 if 条件的单独列表,以评估从函数返回的布尔值。
trunc_keys 列表包含不超过 15 个字符串元素。使用 10 个元素运行测试。
常用功能:
def is_trunc(key):
# about 10 lines of string manipulation that ultimately returns boolean
方法一:
trunc_key_list = [key for key in trunc_keys if is_trunc(key)]
bad_key_list = [key for key in trunc_keys if not is_trunc(key)]
方法二:
trunc_key_list = []
bad_key_list = []
[trunc_key_list.append(key) if is_trunc(key) else bad_key_list.append(key) for key in trunc_keys]
我使用start_time = time.time() 和print("%s" % (time.time() - start_time)) 对结果进行计时
结果(平均 20 次)
方法一:0.000411 方法二:0.000280
我预计方法 1 会更快。我认为列表推导非常适合这种情况,因为它避免了实例化空列表。我发现这个似乎支持这个结果的线程: Python list() vs list comprehension building speed
我对 python 还很陌生,想更好地理解这一点。如此小的列表大小,列表推导不会变得有利吗?我还缺少其他东西吗?
感谢您的任何见解,谢谢!
【问题讨论】:
标签: python-2.7 list-comprehension