通过函数重复应用创建列表

11 投票
6 回答
7346 浏览
提问于 2025-04-16 21:27

我想要这个:

[foo() for _ in xrange (100)]

但要更好看一些。?

6 个回答

3

根据你对“更美”的定义,你可能会更喜欢这个写法:

map(lambda x: foo(), xrange(100))

不过我觉得你现在的写法已经很好了。

8

你可以这样写一个生成器 repeat

def repeat(times, func, *args, **kwargs):
    for _ in xrange(times):
        yield func(*args, **kwargs)

然后:

list(repeat(100, foo))

它还可以接受参数,这些参数会传递给函数,所以你可以:

from random import randint
list(repeat(100, randint, 1, 100))   # 100 random ints between 1 and 100

因为它是一个生成器,你可以把它用在任何可迭代的对象上,比如 list(像这里这样)、tupleset,或者在列表推导式和循环中使用它。

5

我怕你在Python中找不到比这个更好看的写法了,除了有些人会建议不要用_来表示“匿名”变量。这是Python中做你想做的事情的常见写法。

(对于新手来说,_可能会让人感到困惑,因为它可能被误认为是特殊语法。我自己会用它,但只在我代码的“专家部分”。我也越来越常遇到它,不过大家对这个问题的看法似乎还是有点分歧。)

撰写回答