Import random
set_list_1 = ["one"]
set_list_2 = ["two"]
number = random.choice(range(1, 3))
chosen_list = "set_list_" + str(number)
print(len(chosen_list))
返回10,而不是1返回列表名稱的長度
我如何得到它返回列表,而不是名單名稱的長度的長度?
Import random
set_list_1 = ["one"]
set_list_2 = ["two"]
number = random.choice(range(1, 3))
chosen_list = "set_list_" + str(number)
print(len(chosen_list))
返回10,而不是1返回列表名稱的長度
我如何得到它返回列表,而不是名單名稱的長度的長度?
這是一個壞主意。你應該使用列表。
試試這個;
Import random
set_list = [[], ["one"], ["two"]]
number = random.choice(range(1, 3))
chosen_list = set_list[number]
print(len(chosen_list))
如果您絕對想要動態訪問變量,
Import random
set_list_1 = ["one"]
set_list_2 = ["two"]
number = random.choice(range(1, 3))
chosen_list = eval("set_list_" + str(number))
print(len(chosen_list))
我只是使用這些列表作爲例子,我在每個列表中有更多的項目 – qwiqwiqwiqwiqwi
您可以追加到列表中儘可能多的,你想要的。如果您想按問題中所示執行操作,請檢查更新後的答案。 –
要回答這個問題本身,chosen_list
不是列表,而是一個字符串。那麼len()
返回一個字符串的長度,也就是說,它的字符數。
如果要通過它的名稱訪問列表,而不是:
如前所述通過對方的回答和評論,你可以先使用eval
這一點。
您還可以使用locals()
(或者globals()
如果你的列表是在全球範圍內)(根據您當前的範圍內)dictionnary避免eval
。這些函數返回一個包含您可以在全局(以及模塊範圍準確)/本地範圍內訪問的所有內容的字典。
import random
set_list_1 = ["one"]
set_list_2 = ["two"]
number = random.choice(range(1, 3))
chosen_list = locals()["set_list_" + str(number)]
print(len(chosen_list))
它可能比eval
更快更安全。
或者,您可以在dict
中註冊您的列表,將變量名稱映射到̀list
。舉例來說,你可以做這樣的事情:
import random
registry = {}
registry["set_list_1"] = ["one"]
registry["set_list_2"] = ["two"]
number = random.choice(range(1, 3))
chosen_list = registry["set_list_" + str(number)]
print(len(chosen_list))
這是毫無疑問的,甚至快於使用locals()
,實際上是Python中常見的模式。 Here is a classic example of this, involving metaclasses.
此外,你可以做到這一點,如果你不真正需要的變量名,因爲任何其他原因:
import random
registry = []
registry.append(["one"])
registry.append(["two"])
chosen_list = random.choice(registry)
print(len(chosen_list))
在這裏你去:https://docs.python.org/2/library/ functions.html#eval :) – Jacquot