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推导),而在即时计算值并且不分配内存(它是生成器).