在单行while循环中构造列表 - SyntaxError:无效语法

时间:2013-09-20 16:21:33

标签: python while-loop

这是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 

我该如何解决?

感谢。

2 个答案:

答案 0 :(得分:3)

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

之类的内容
> i = 0
> i += 1 while i < 10
> i
=> 10

解决方案:而是使用列表推导和

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

其中说“给我一个新名单,foo次”

不要尝试使用[[]] * 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]]

如果您完全设置了单行循环,那么这样做的方法就是

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

但列表理解是最简单,最快,最pythonic的解决方案

答案 1 :(得分:2)

AFAIK你在循环时不能有一行。 但您可以使用comprehension

return [[] for x in range(foo)]