如何使用可变长度序列的序列拆包?
How to use sequence unpacking with a sequence of variable length?
如果我事先知道列表的长度,我可以使用序列拆包来为变量分配列表的元素:
my_list = [1,2,3]
x, y, z = 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}
。
请不要这样做。
你可以像这样强制将列表的长度解包到你想要的大小
>>> 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]
>>>
如果它们小于你会得到一个错误,否则你取前 3 个元素
对于元素较少的情况你可以这样做
>>> my_list=[1,2]
>>> x,y,z=(my_list[:3] +[-1]*3)[:3]
>>> x
1
>>> y
2
>>> z
-1
>>>
有一个包含默认值的列表,您可以将其连接到 my_list 的 sub-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 = [1,2,3]
x, y, z = 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}
。
请不要这样做。
你可以像这样强制将列表的长度解包到你想要的大小
>>> 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]
>>>
如果它们小于你会得到一个错误,否则你取前 3 个元素
对于元素较少的情况你可以这样做
>>> my_list=[1,2]
>>> x,y,z=(my_list[:3] +[-1]*3)[:3]
>>> x
1
>>> y
2
>>> z
-1
>>>
有一个包含默认值的列表,您可以将其连接到 my_list 的 sub-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]