Python 在列表中的列表上递增(封装列表)
我在让for循环工作时遇到了一些问题,它应该在窗口中创建许多标签。 以下是代码片段:Python 在列表中的列表上递增(封装列表),python,python-3.x,list,for-loop,Python,Python 3.x,List,For Loop,我在让for循环工作时遇到了一些问题,它应该在窗口中创建许多标签。 以下是代码片段: import tkinter as tk root = tk.Tk() #Frame 1: components frame1 = tk.Frame(root).grid(row=0) items = ['REED', 'PIR', 'VIBR', 'REED', 'PIR'] for r in items: tk.Label(frame1, text=items[r]).grid(row=r,colu
import tkinter as tk
root = tk.Tk()
#Frame 1: components
frame1 = tk.Frame(root).grid(row=0)
items = ['REED', 'PIR', 'VIBR', 'REED', 'PIR']
for r in items:
tk.Label(frame1, text=items[r]).grid(row=r,column=0)
#Frame 2: statusList
frame2 = tk.Frame(root).grid(row=1)
status = [[True, False, True, False],
['14:00:00', '13:24:31', '15:58:32', '08:33:01']]
for r in status:
for s in status[r]:
tk.Label(frame2, text=status[r][s]).grid(row=s,column=r)
root.mainloop()
它输出错误
TypeError:列表索引必须是整数或片,而不是str
这表明我对for循环的使用是错误的。我查阅了一些信息,发现我当然可以循环浏览一个列表,并让它遍历每个项目,例如打印该项目,但到目前为止,我还不知道如何在有一个封装的列表时实现这个想法。将状态为[r]的s的
替换为状态为[r]:
的s:
r
包含一个status
元素(在本例中,在循环的内部中迭代的列表
),而不是索引
出于同样的原因,您还应该将text=status[r][s]
替换为text=s
如果只需要索引,可以使用:
for i in range(len(lst)):
对于某些列表
lst
,如果同时需要索引和元素(在这种情况下,需要在列和行值中传递索引),请使用:
将状态为[r]的s的:
替换为状态为[r]的s的:
r
包含一个status
元素(在本例中,在循环的内部中迭代的列表
),而不是索引
出于同样的原因,您还应该将text=status[r][s]
替换为text=s
如果只需要索引,可以使用:
for i in range(len(lst)):
对于某些列表
lst
,如果同时需要索引和元素(在这种情况下,需要在列和行值中传递索引),请使用:
在这里:
python的for循环不是这样工作的。在for循环的主体中,r
不是items
中项目的索引,而是项目,因此您需要:
for item in items:
tk.Label(frame1, text=item).grid(row=???,column=0)
但您似乎还希望项的索引作为.grid()
的行
参数传递。为此,您可以使用枚举(seq)
,它为seq的每个元素生成(索引,项)
元组:
for index, item in enumerate(items):
tk.Label(frame1, text=item).grid(row=index,column=0)
请注意,此处也存在类似问题:
status = [[True, False, True, False],
['14:00:00', '13:24:31', '15:58:32', '08:33:01']]
for r in status:
for s in status[r]:
tk.Label(frame2, text=status[r][s]).grid(row=s,column=r)
在这里:
python的for循环不是这样工作的。在for循环的主体中,r
不是items
中项目的索引,而是项目,因此您需要:
for item in items:
tk.Label(frame1, text=item).grid(row=???,column=0)
但您似乎还希望项的索引作为.grid()
的行
参数传递。为此,您可以使用枚举(seq)
,它为seq的每个元素生成(索引,项)
元组:
for index, item in enumerate(items):
tk.Label(frame1, text=item).grid(row=index,column=0)
请注意,此处也存在类似问题:
status = [[True, False, True, False],
['14:00:00', '13:24:31', '15:58:32', '08:33:01']]
for r in status:
for s in status[r]:
tk.Label(frame2, text=status[r][s]).grid(row=s,column=r)
关于frame1
的标签,您也有一个问题。如果您依赖于以下各项,则可以解决此问题:
关于frame1
的标签,您也有一个问题。如果您依赖于以下各项,则可以解决此问题:
当前位置O喘息不是我所期望的,谢谢你的快速回答。如果您确实想在索引上进行迭代,可以对范围内的I(len(lst))使用:
,但在大多数情况下,您希望在实际元素上进行迭代。@yinnonsanders如果同时需要项及其索引,最好使用enumerate(lst)
。@brunodesshuilliers true,在代码中忽略了这一点。在你的回答中,你把它涵盖得更好了:哦,喘息不是我所期望的,谢谢你迅速的回答。如果您确实想在索引上进行迭代,可以对范围内的I(len(lst))使用:
,但在大多数情况下,您希望在实际元素上进行迭代。@yinnonsanders如果同时需要项及其索引,最好使用enumerate(lst)
。@brunodesshuilliers true,在代码中忽略了这一点。在你的回答中,你涵盖得更好了,这确实解决了我的循环问题,但我发现我也有窗口问题。但我想这是另一天的故事。好吧,这真的解决了我的循环问题,只是让我发现我也有窗口问题。但我想这是另一天的故事。不要把问题改成包含答案,这对未来的观众没有帮助。不要把问题改成包含答案,这对未来的观众没有帮助。