分配列表的多个值

cod*_*ler 14 python list assign

我很想知道是否有一种"pythonic"方式将列表中的值分配给元素?为了更清楚,我要求这样的事情:

myList = [3, 5, 7, 2]

a, b, c, d = something(myList)
Run Code Online (Sandbox Code Playgroud)

以便:

a = 3
b = 5
c = 7
d = 2
Run Code Online (Sandbox Code Playgroud)

我正在寻找任何其他更好的选择,而不是手动执行此操作:

a = myList[0]
b = myList[1]
c = myList[2]
d = myList[3]
Run Code Online (Sandbox Code Playgroud)

NDe*_*vox 22

只需输入:

>>> a,b,c,d = [1,2,3,4]
>>> a
1
>>> b
2
>>> c
3
>>> d
4
Run Code Online (Sandbox Code Playgroud)

assignment unpacking当您iterable将多个变量分配给上面时,Python会使用Python .

Python3.x这已被扩展,因为您还可以解包大量小于iterable使用星号运算符的长度的变量:

>>> a,b,*c = [1,2,3,4]
>>> a
1
>>> b
2
>>> c
[3, 4]
Run Code Online (Sandbox Code Playgroud)


r0n*_*0ng 7

完全同意 NDevox 的回答

a,b,c,d = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

我认为还值得一提的是,如果您只需要列表的一部分,例如只需要列表中的第二个和最后一个元素,您可以这样做

_, a, _, b = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)


Abd*_*iJK 6

a, b, c, d = myList 就是你想要的。

基本上,该函数返回一个元组,它类似于列表 - 因为它是一个可迭代的。

顺便说一句,这适用于所有可迭代对象。并且在使用的时候需要知道iterable的长度。


小智 5

一个技巧是在 Python 3.8 中使用 walrus 运算符,这样您仍然拥有 my_list 变量。并使其成为一条线操作。

>>> my_list = [a:=3, b:=5, c:=7, d:=2]
>>> a
3
>>> b
5
>>> c
7
>>> d
2
>>> my_list
[3, 5, 7, 2]
Run Code Online (Sandbox Code Playgroud)

PS:使用camelCase(myList)也不是Pythonic。

Python 3.8 的新增功能:https://docs.python.org/3/whatsnew/3.8.html