簡體   English   中英

如何使用長度可變的序列解包?

[英]How to use sequence unpacking with a sequence of variable length?

如果我事先知道列表的長度,則可以使用序列拆包為變量分配列表的元素,從而:

my_list = [1,2,3]

x, y, z = my_list

如果我事先不知道列表的長度,如何使用序列解包將變量分配給列表的元素? 如果出於爭論的目的,我不在乎變量的命名方式,那么我可以先獲取列表的長度,然后再解壓縮為任意數量的變量嗎?

當然建議,但可能:

my_list = [1, 2, 3]
for counter, value in enumerate(my_list):
    exec 'a{} = {}'.format(counter, value)
print a0, a1, a2

輸出:

1 2 3

或使用Python 3:

>>> a, *rest = my_list
>>> a
1
>>> rest
[2, 3]

您可以像這樣將列表的長度強制解壓縮為所需的大小

>>> my_list=range(10)
>>> a,b,c = my_list[:3]
>>> a
0
>>> b
1
>>> c
2
>>> my_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 

如果它們較小,您將得到一個錯誤,否則,您將獲得前三個要素

對於較少元素的情況,您可以執行以下操作

>>> my_list=[1,2]
>>> x,y,z=(my_list[:3] +[-1]*3)[:3]
>>> x
1
>>> y
2
>>> z
-1
>>> 

有一個默認值的列表,您可以將其連接到my_list的子列表,然后從結果中獲取所需的內容

正確的答案是您應該將這些元素保留在列表中。 這就是列表的用途。

錯誤的答案是以回旋方式添加局部變量。 對於Python 3:

ctr = 0
for value in my_list:
    __builtins__.locals()['my_list_{}'.format(ctr)] = value
    ctr += 1

如果my_list具有n項目,則將創建變量my_list_0, my_list_1, ..., my_list_{n-1}

請不要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM