我想问一下python中是否可以这样:
a,b = [i,i+1 for i in range(5)]
我知道这是不可能的,因为我有一个错误,但我想你明白我想要实现的目标。让我澄清一下,我能做到:
a,b = 3+2,3
编辑--->甚至更好:
a,b = [0,1,2,3,4],[1,2,3,4,5]
在我的第一个代码示例中,我不是类似的东西。我试图将变量“a”和“b”分配为列表,使用列表理解,但使用元组作为赋值,重点是我不想使用它:
a = [i for in range(5)]
b = [i+1 for in range(5)]
我知道我可以使用它:t = [(i,i+1) for i in range(5)]
,但这不是重点
顺便说一下,这只是一个简单的例子=> “1,I + 1”
编辑--->我想澄清一下我的问题。如何使用list comprehension在一行中分配多个变量(类型列表)?
答案 0 :(得分:7)
运行时:
a,b = [(i,i+1) for i in range(5)] # wrapped i, i+1 in parentheses (syntax error)
它列出了五个两项元组,如下所示:
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
但是你试图将这五个元组分配给两个对象(a
和b
)
在zip中使用参数解包(*),您可以将输出“解压缩”到每个元组的第一个和第二个元素:
a,b = zip(*[(i,i+1) for i in range(5)])
这是:
[(0, 1, 2, 3, 4), (1, 2, 3, 4, 5)]
可以在编写
后分配给a
和b
答案 1 :(得分:1)
不要试图聪明。这是完全可以接受的代码:
>>> a = range(5)
>>> b = range(1,6)
>>> a, b
([0, 1, 2, 3, 4], [1, 2, 3, 4, 5])