Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中的列表上递增(封装列表)_Python_Python 3.x_List_For Loop - Fatal编程技术网

Python 在列表中的列表上递增(封装列表)

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

我在让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,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,在代码中忽略了这一点。在你的回答中,你涵盖得更好了,这确实解决了我的循环问题,但我发现我也有窗口问题。但我想这是另一天的故事。好吧,这真的解决了我的循环问题,只是让我发现我也有窗口问题。但我想这是另一天的故事。不要把问题改成包含答案,这对未来的观众没有帮助。不要把问题改成包含答案,这对未来的观众没有帮助。