如果我事先知道列表的长度,我可以使用序列解包来为变量分配列表中的元素:
my_list = [1,2,3]
x, y, z = my_list
如果我事先不知道列表的长度,如何使用序列解包将变量分配给列表的元素?如果为了论证我不关心变量是如何命名的,我可以先得到列表的长度,然后解压缩到这个任意命名的变量吗?
答案 0 :(得分:3)
当然不推荐但可能:
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]
答案 1 :(得分:2)
你可以强制列表的长度解压缩到你想要的大小
>>> 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的子列表,也可以从结果中获取所需的内容
答案 2 :(得分:1)
正确的答案是你应该将这些元素留在列表中。这就是列表的用途。
错误的答案是以环形方式添加局部变量。对于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}
。
请不要这样做。