如何创建可以调整变量数量的变量列表取决于值列表的长度
How creating a list of variables that can adjust numbers of variables depends on length of values list
我想制作一个始终等于值列表长度的变量列表。
**Example**
list1 = [0,1,2]
return
[a0,a1,a2]
a0=0,a1=1,a2=2
list2 = [10,20,30,40]
return
[b0,b1,b2,b3]
b0=10,b1=20,b2=30,b3=40
好吧,你可以这样做,但我不确定我是否会推荐它:
list1 = [0,1,2]
for i, v in enumerate(list1):
exec(f"a{i} = {v}")
print(dir())
print([a0,a1,a2])
输出:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a0', 'a1', 'a2', 'i', 'list1', 'v']
[0, 1, 2]
重复调用exec()
function have added a0
, a1
and a2
to the current local scope as shown by the output of the call to dir()
。打印 [a0, a1, a2]
确认这些变量具有 list1
.
中的值
作为@
user2736738 在评论中建议,您的问题似乎表明您试图解决的根本问题可能可以通过不同的方法更好地解决。
UPDATE:这里有一些额外的代码来进一步说明变量和变量列表在后续更新时的行为,同时还在评论中解决 OP 的查询,即“我想要输出是一个变量列表...如何创建列表而不是手动输入它?":
list1 = [0,1,2]
for i, v in enumerate(list1):
exec(f"a{i} = {v}")
exec(f"new_list = [{','.join('a'+str(i) for i in range(len(list1)))}]")
print(dir())
print("new_list:")
print(new_list)
print(','.join('a'+str(i) for i in range(len(list1))) + ':')
exec(f"print({','.join('a'+str(i) for i in range(len(list1)))})")
if len(new_list) > 0:
a0 = 99
print(f"new_list after updating a0 to {a0}:")
print(new_list)
if len(new_list) > 1:
new_list[1] = 66
print(f"new_list after updating element at index 1 to {new_list[1]}:")
print(new_list)
print(','.join('a'+str(i) for i in range(len(list1))) + f' after updating element at index 1 to {new_list[1]}:')
exec(f"print({','.join('a'+str(i) for i in range(len(list1)))})")
输出:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a0', 'a1', 'a2', 'i', 'list1', 'new_list', 'v']
new_list:
[0, 1, 2]
a0,a1,a2:
0 1 2
new_list after updating a0 to 99:
[0, 1, 2]
new_list after updating element at index 1 to 66:
[0, 66, 2]
a0,a1,a2 after updating element at index 1 to 66:
99 1 2
第二个 exec()
调用开始 exec(f"new_list = ...
将执行您在评论中要求的操作。但是,我再次敦促您考虑这是否真的对您实现更大的目标有帮助,并提醒您注意此变量列表与变量本身之间的脱节。
如你所见,给变量a0
赋新值对new_list
没有影响,变量引用列表[a0, a1, a2]
,给[a0, a1, a2]
赋新值new_list[1]
,该列表中索引为 1 的元素,对用于初始化该列表的变量 a1
没有影响。
我想制作一个始终等于值列表长度的变量列表。
**Example**
list1 = [0,1,2]
return
[a0,a1,a2]
a0=0,a1=1,a2=2
list2 = [10,20,30,40]
return
[b0,b1,b2,b3]
b0=10,b1=20,b2=30,b3=40
好吧,你可以这样做,但我不确定我是否会推荐它:
list1 = [0,1,2]
for i, v in enumerate(list1):
exec(f"a{i} = {v}")
print(dir())
print([a0,a1,a2])
输出:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a0', 'a1', 'a2', 'i', 'list1', 'v']
[0, 1, 2]
重复调用exec()
function have added a0
, a1
and a2
to the current local scope as shown by the output of the call to dir()
。打印 [a0, a1, a2]
确认这些变量具有 list1
.
作为@ user2736738 在评论中建议,您的问题似乎表明您试图解决的根本问题可能可以通过不同的方法更好地解决。
UPDATE:这里有一些额外的代码来进一步说明变量和变量列表在后续更新时的行为,同时还在评论中解决 OP 的查询,即“我想要输出是一个变量列表...如何创建列表而不是手动输入它?":
list1 = [0,1,2]
for i, v in enumerate(list1):
exec(f"a{i} = {v}")
exec(f"new_list = [{','.join('a'+str(i) for i in range(len(list1)))}]")
print(dir())
print("new_list:")
print(new_list)
print(','.join('a'+str(i) for i in range(len(list1))) + ':')
exec(f"print({','.join('a'+str(i) for i in range(len(list1)))})")
if len(new_list) > 0:
a0 = 99
print(f"new_list after updating a0 to {a0}:")
print(new_list)
if len(new_list) > 1:
new_list[1] = 66
print(f"new_list after updating element at index 1 to {new_list[1]}:")
print(new_list)
print(','.join('a'+str(i) for i in range(len(list1))) + f' after updating element at index 1 to {new_list[1]}:')
exec(f"print({','.join('a'+str(i) for i in range(len(list1)))})")
输出:
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a0', 'a1', 'a2', 'i', 'list1', 'new_list', 'v']
new_list:
[0, 1, 2]
a0,a1,a2:
0 1 2
new_list after updating a0 to 99:
[0, 1, 2]
new_list after updating element at index 1 to 66:
[0, 66, 2]
a0,a1,a2 after updating element at index 1 to 66:
99 1 2
第二个 exec()
调用开始 exec(f"new_list = ...
将执行您在评论中要求的操作。但是,我再次敦促您考虑这是否真的对您实现更大的目标有帮助,并提醒您注意此变量列表与变量本身之间的脱节。
如你所见,给变量a0
赋新值对new_list
没有影响,变量引用列表[a0, a1, a2]
,给[a0, a1, a2]
赋新值new_list[1]
,该列表中索引为 1 的元素,对用于初始化该列表的变量 a1
没有影响。