递增列表中的列表(封装列表)
Posted
技术标签:
【中文标题】递增列表中的列表(封装列表)【英文标题】:Incrementing over a list in a list (encapsulated list) 【发布时间】:2018-04-22 15:16:28 【问题描述】:我在让我的 for 循环工作时遇到了一些麻烦,它应该在一个窗口中创建许多标签。 这是代码sn-p:
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 循环的使用是错误的。我查找了一些信息,发现我当然可以遍历一个列表并让它遍历每个项目,例如打印该项目,但是到目前为止,当有一个封装列表时,我不知道如何实现这个想法我想循环播放。
【问题讨论】:
不要更改问题以包含答案,这对未来的观众没有帮助。 【参考方案1】:这里:
for r in items:
tk.Label(frame1, text=items[r]).grid(row=r,column=0)
python 的 for 循环不是这样工作的。在 for 循环的主体中,r
不是 items
中项目的索引,它是项目,所以你需要:
for item in items:
tk.Label(frame1, text=item).grid(row=???,column=0)
但您似乎还希望项目的索引作为.grid()
的row
参数传递。为此,您可以使用enumerate(seq)
,它为seq
的每个元素生成一个(index, item)
元组:
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)
【讨论】:
好的,这确实解决了我的循环问题,只是让我发现我也有窗口问题。但我猜这是另一天的故事。【参考方案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):
【讨论】:
:O 喘气 不是我所期望的,感谢您的快速回答。我试试看 如果你确实想迭代索引,你可以使用for i in range(len(lst)):
,但在大多数情况下你想迭代实际元素。
@yinnonsanders 最好使用enumerate(lst)
,如果您想要项目及其索引。
@brunodesthuilliers 是的,在代码中错过了这一点。你的回答更好地涵盖了它【参考方案3】:
您还对frame1
的标签有疑问。如果你依赖enumerate()
,你可以修复它:
for row, text in enumerate(items):
tk.Label(frame1, text=text).grid(row=row,column=0)
【讨论】:
以上是关于递增列表中的列表(封装列表)的主要内容,如果未能解决你的问题,请参考以下文章
php中怎么把下拉列表中的数据按字母排序,并实现拼音的搜索啊