在python中填充callable或lambda中的列表或元组

Jac*_*lch 4 python arrays tuples list callable

这是我最近遇到的一个问题.谷歌似乎没有答案所以我把它带给堆栈溢出的好人.

我正在寻找一种使用函数输出填充列表的简单方法.像这样的东西:

fill(random.random(), 3) #=> [0.04095623, 0.39761869, 0.46227642]
Run Code Online (Sandbox Code Playgroud)

以下是我发现的其他方法.但我对它们并不满意,因为它们看起来效率低下.

results = []
for x in xrange(3): results.append(random.random())
#results => [0.04095623, 0.39761869, 0.46227642]
Run Code Online (Sandbox Code Playgroud)

map(lambda x: random.random(), [None] * 3)
#=> [0.04095623, 0.39761869, 0.46227642]
Run Code Online (Sandbox Code Playgroud)

建议?


感谢所有的答案.我知道有一种更蟒蛇式的方式.

对效率问题......

$ 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
Run Code Online (Sandbox Code Playgroud)

phi*_*hag 11

怎么样一个列表理解

[random.random() for x in xrange(3)]
Run Code Online (Sandbox Code Playgroud)

此外,在许多情况下,您只需要一次值.在这些情况下,最好是生成器表达式,它只是及时计算值并且不需要内存分配:

results = (random.random() for x in xrange(3))
for r in results:
   ...
# results is "used up" now.
# We could have used results_list = list(results) to convert the generator
Run Code Online (Sandbox Code Playgroud)

顺便说一句,在Python 3.x中,xrange已被替换为range.在Python 2.x中,range分配内存并预先计算所有值(如列表xrange推导),而在即时计算值并且不分配内存(它是生成器).