这是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
我该如何解决?
感谢。
答案 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)]