增加列表中的列表(封装列表)

时间:2017-11-09 15:00:14

标签: 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,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:list indices必须是整数或切片,而不是str

这表明我对for循环的使用是错误的。我查了一些信息,发现我当然可以遍历一个列表并让它遍历每个项目,例如打印该项目,但是当我有一个封装列表时,我不知道如何实现这个想法我想循环。

3 个答案:

答案 0 :(得分:2)

for s in status[r]:替换为for s in r:

r包含status的元素(在这种情况下,list要在内部for循环中迭代),不是索引

出于同样的原因,您还应该将text=status[r][s]替换为text = s

如果您只想要索引,可以使用:

for i in range(len(lst)):

对于某些list lst,如果您想要索引和元素(在这种情况下,您需要索引传递列和行值),请使用:

for i, elem in enumerate(lst):

答案 1 :(得分:2)

下面:

for r in items:
    tk.Label(frame1, text=items[r]).grid(row=r,column=0)

这不是python的循环工作方式。在for循环体中,r不是items中项目的索引, 项目,因此您需要:< / p>

for item in items:
    tk.Label(frame1, text=item).grid(row=???,column=0)

但似乎您还希望项目的索引作为row的{​​{1}}参数传递。为此,您可以使用.grid()enumerate(seq)的每个元素生成(index, item)元组:

seq

请注意,您在此处也有类似的问题:

for index, item in enumerate(items):
    tk.Label(frame1, text=item).grid(row=index,column=0)

答案 2 :(得分:0)

frame1标签周围也存在问题。如果您依赖enumerate()

,则可以修复此问题
for row, text in enumerate(items):
    tk.Label(frame1, text=text).grid(row=row,column=0)