0

这是while循环:

def func1(foo)
    bar = []
    while len(bar) < foo: 
        bar.append([])
    return bar

我试图将我的代码放在一行中:

def func1(foo)
    bar = []
    return (bar.append([]) while len(bar) < foo)

但是当我运行它时,我有以下错误:

return (bar.append([]) while len(bar) < foo)
                           ^
SyntaxError: invalid syntax 

我该如何解决?

谢谢。

4

2 回答 2

3

这似乎来自 Ruby 背景,您可以在其中编写诸如

> i = 0
> i += 1 while i < 10
> i
=> 10

解决方案:改为使用列表推导和

def func1(foo):
    return [ [] for _ in range(foo) ]

上面写着“给我一个新列表,foo times”

不要尝试使用[[]] * foo速记,因为列表中的所有条目实际上都会引用同一个子列表

>>> l = [[]] * 10
>>> l[0].append(2) # now every sublist has a 2 in it.
>>> l
[[2], [2], [2], [2], [2], [2], [2], [2], [2], [2]]

或类似的使用extend

>>> foo =6
>>> bar = ['abc']
>>> bar.extend([[]] * foo)
>>> bar
['abc', [], [], [], [], [], []]
>>> bar[1].append(2)  # same problem
>>> bar
['abc', [2], [2], [2], [2], [2], [2]]

如果您绝对设置在单行 while 循环上,那么这样做的方法是

def func1(foo)
    bar = []
    while len(bar) < foo: bar.append([])
    return bar

但是列表推导是最简单、最快、最 Pythonic 的解决方案

于 2013-09-20T16:26:43.453 回答
2

AFAIK 你不能有一行 while 循环。但是您可以使用理解

return [[] for x in range(foo)]
于 2013-09-20T16:23:07.747 回答