我认为没有人提到的一点是list 是 Python 中的内置方法。如果你做了list("abcdefg"),你会得到['a','b','c','d','e','f','g']——你传递给list的迭代中所有元素的列表。因此,当您执行for q in list(z) 时,我知道您正在尝试执行for q in list1 和for q in list2,但是您正在执行for q in list(1),它试图迭代数字1——这是不可能的,这就是为什么你会收到TypeError。
如果你对使用这个特定的实现感到厌烦(相信我,你真的应该按照其他答案的建议列出一个列表),请改为:
list0 = ["A","B"]
list1 = ["C","D"]
for i in range(2): #which is a generator that yields 0 and 1
for q in vars()["list{}".format(i)]:
print(q)
vars() 是一个内置函数,它返回一个字典,其键是所有本地可用的字符串形式的变量,其值是存储在这些变量中的值。现在,您无需在数字上调用内置方法 list,而是使用 string formatting 构建与您正在使用的列表相对应的字符串。
也就是说,每当您尝试使用变量名来包含数据时,您实际上只是在拼凑代码。尝试将其编织得更优雅,而不是依靠代码生成变量名以进行迭代:)
为了完整起见,您应该这样做!
a_list = ["A","B"]
b_list = ["C","D"]
lists = a_list+b_list #lists == ["A","B","C","D"]
# could also do lists = [element for element in list_ for list_ in [a_list,b_list]]
# but why in the heck should we complicate things?? May be useful if you need to
# filter elements for whatever reason. Maybe only uppercase letters make it through?
# so something like:
# c_list = ["e","F"]
# lists = [e for e in list_ for list_ in [a_list,b_list,c_list] if e.isupper()]
# I dunno, just throwing it out there for your bag of tricks!
for item in lists:
print(item)
或者,如果您有大量可迭代项,不一定只是支持连接运算符的列表,
list0 = ["A","B"]
...
list99 = ["Y","Z"]
lists = [list0, ... , list99]
for iterable in list:
for element in iterable:
print(element)