我想制作一個始終等于值串列長度的變數串列。
**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
uj5u.com熱心網友回復:
好吧,你可以這樣做,但我不確定我是否會推薦它:
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()
已添加到當前本地范圍,如呼叫的輸出a0
所示。列印確認這些變數具有 中的值。a1
a2
dir()
[a0, a1, a2]
list1
正如@ user2736738在評論中所建議的那樣,您的問題似乎表明您嘗試解決的根本問題可以通過不同的方法更好地解決。
更新:這里有一些額外的代碼來進一步說明變數和變數串列在后續更新時的行為方式,同時還在評論中解決 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
沒有影響,并且為串列中索引 1 處的元素分配新值對用于的變數沒有影響初始化該串列。new_list
[a0, a1, a2]
new_list[1]
a1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/469388.html