【发布时间】:2012-02-01 00:06:43
【问题描述】:
这是我最近经常遇到的问题。谷歌似乎没有答案,所以我把它带给堆栈溢出的好人。
我正在寻找一种简单的方法来使用函数的输出填充列表。像这样的:
fill(random.random(), 3) #=> [0.04095623, 0.39761869, 0.46227642]
这是我发现的其他方法。但我对它们并不满意,因为它们似乎效率低下。
results = []
for x in xrange(3): results.append(random.random())
#results => [0.04095623, 0.39761869, 0.46227642]
和
map(lambda x: random.random(), [None] * 3)
#=> [0.04095623, 0.39761869, 0.46227642]
建议?
感谢您的所有回答。我知道还有一种更像 python 的方式。
还有效率问题...
$ python --version
Python 2.7.1+
$ python -m timeit "import random" "map(lambda x: random.random(), [None] * 3)"
1000000 loops, best of 3: 1.65 usec per loop
$ python -m timeit "import random" "results = []" "for x in xrange(3): results.append(random.random())"
1000000 loops, best of 3: 1.41 usec per loop
$ python -m timeit "import random" "[random.random() for x in xrange(3)]"
1000000 loops, best of 3: 1.09 usec per loop
【问题讨论】:
-
map和filter如果知道列表推导是没用的... -
“因为它们似乎效率低下”?你用
timeit测量了什么? -
响应 timeit 测量:您测量的是初始开销。 对于 n=3,所有算法都很快。尝试 300 或 3000 以更好地了解性能。另请注意,一个好的 Python 实现(例如 PyPy)可能会内联所有变体并执行相同的代码。
标签: python arrays list tuples callable