List comprehension with tuple assignment

て烟熏妆下的殇ゞ 提交于 2021-02-10 13:42:30

问题


I want to ask if something like this is possible in python:

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

I know this isn't possible because I have got an error, but I think you understand what I am trying to achieve. Let me clear it up, I can do :

a,b = 3+2,3

Edit ---> Or even better:

a,b = [0,1,2,3,4],[1,2,3,4,5]

I wan't a similar thing in my first code example. I am trying to assign variables 'a' and 'b' as list, with list comprehension, but using tuple as assignment, the point is I don't want to use this:

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

I am aware that I can use this: t = [(i,i+1) for i in range(5)], but that's not the point.
By the way this is only a simple example => "i,i+1"

Edit ---> I would like to clarify my question. How to assign several variables (type list) in one line, using list comprehension?


回答1:


When you run this:

a,b = [(i,i+1) for i in range(5)] # wrapped i, i+1 in parentheses (syntax error)

It makes a list of five two-item tuples, like this:

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

But you're trying to assign those five tuples to only two objects (a and b)

Using argument unpacking (*) in zip, you can "unzip" the output to the first and second elements of each tuple:

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

Which is this:

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

And can be assigned to a and b as you've written




回答2:


Don't try to be clever. This is perfectly acceptable code:

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


来源:https://stackoverflow.com/questions/21493637/list-comprehension-with-tuple-assignment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!