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