列表理解与元组赋值

时间:2014-02-01 03:04:52

标签: python list tuples list-comprehension

我想问一下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在一行中分配多个变量(类型列表)?

2 个答案:

答案 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)]

但是你试图将这五个元组分配给两个对象(ab

zip中使用参数解包(*),您可以将输出“解压缩”到每个元组的第一个和第二个元素:

a,b = zip(*[(i,i+1) for i in range(5)])

这是:

[(0, 1, 2, 3, 4), (1, 2, 3, 4, 5)]

可以在编写

后分配给ab

答案 1 :(得分:1)

不要试图聪明。这是完全可以接受的代码:

>>> a = range(5)
>>> b = range(1,6)
>>> a, b
([0, 1, 2, 3, 4], [1, 2, 3, 4, 5])