尝试学习python,我正在尝试:
list0=['A','B'];
list1=['C','D'];
z=0
while z < 2:
for q in list(z):
print q
z += 1
我想要打印
A
B
C
D
但是我收到以下错误:
Traceback (most recent call last):
File "main.py", line 6, in
for q in list(z):
TypeError: 'int' object is not iterable
这在python中可行吗?我知道我已经用其他语言完成了这个或类似的东西。
答案 0 :(得分:3)
您可以将这两个列表收集为另一个列表,然后您可以像这样将其编入索引
list0=['A','B'] # We don't need semicolons
list1=['C','D']
lists=[list0, list1] # Create a list of lists
z=0
while z < 2:
for q in lists[z]: # We access list's index with [], not with ()
print q
z += 1
<强>输出强>
A
B
C
D
可以像这样实现相同的效果
for current_list in [list0, list1]:
for current_item in current_list:
print current_item
有一个内置的python模块,它带有itertools.chain
方法,可以像这样使用
import itertools
for current_item in itertools.chain(list0, list1):
print current_item
答案 1 :(得分:1)
您尝试做的最相似的想法是创建一个由您拥有的2个列表组成的列表。因此,您可以通过0 or 1
lists[index]
)访问每个列表
lists = [['A', 'B'], ['C', 'D']]
z = 0
while z < 2:
for q in lists[z]:
print q
z += 1
请注意,list
不是变量的好名称,因为它隐藏了Python中的list
类型。
答案 2 :(得分:0)
list 需要一个iterable作为参数。你在整数
上调用它答案 3 :(得分:0)
我认为没有人提到的一点是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)
或者,如果您有一个可迭代项目的TON,不一定只是支持连接运算符的列表,
list0 = ["A","B"]
...
list99 = ["Y","Z"]
lists = [list0, ... , list99]
for iterable in list:
for element in iterable:
print(element)
答案 4 :(得分:0)
首先,如果每行只有1个语句,则不需要在Python中使用分号。所以在你的代码示例中:
list0=['A','B'];
list1=['C','D'];
应该只是:
list0=['A','B']
list1=['C','D']
请注意,您的语法是正确的,但不需要这两个尾部分号。如果你想在同一行然后上声明两个列表,你将使用分号:
list0=['A','B']; list1=['C','D']
但是,不建议这样做。
其次,在您的代码中,不需要单独的计数器z
,您可以将列表简单地粘合,然后只打印它们:
for letter in list0 + list1:
print letter
作为示范:
>>> list0=['A','B']; list1=['C','D']
>>> for letter in list0 + list1:
>>> print letter
...
A
B
C
D
现在让我解释一下你得到的错误:
'int' object is not iterable
如果你想在python中创建一个list
,你需要给构造函数一个可迭代的对象(你可以像数组一样循环的对象),当你给它一个简单的数字时,它会给出你是一个错误,所以你可以像这样创建一个列表:
>>> var = list([1,2,3,4])
>>> type(var)
<type 'list'>
但你甚至不需要这样做,你可以把东西放在[]
中,这也会为你创建一个列表:
>>> var2 = [1,2,3,4]
>>> type(var2)
<type 'list'>