我认为没有人提及的一点是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
。
如果你使用这个特定的实现DEADSET(相信我,你真的应该做一个列表的列表作为其他答案建议),而不是做:
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)
或者,如果你有可迭代的项目,不一定只是支持一个连接符列表的TON,
list0 = ["A","B"]
...
list99 = ["Y","Z"]
lists = [list0, ... , list99]
for iterable in list:
for element in iterable:
print(element)
请注意,在这里的行末尾不需要';'。这不是PHP或任何你可能来自的语言。 ;)为了完美,PEP8告诉你应该在'='周围放置空格(除非用作参数 - 稍后会看到)和其他运算符('+','-'等) 。 – JeromeJ
在用作函数之前,我看不到在代码中声明的变量'list'。我认为你的意图是使用'list0 [z]'或'list1 [z]' – Tariq