在 for 循环中如何解开元组?
- 2024-12-30 08:42:00
- admin 原创
- 187
问题描述:
我偶然发现了以下代码:
for i, a in enumerate(attributes):
labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W))
e = Entry(root)
e.grid(column=1, row=i)
entries.append(e)
entries[i].insert(INSERT,"text to insert")
我不明白这i, a
一点,搜索信息也for
没有得到任何有用的结果。当我尝试并试验代码时,我得到了错误:
ValueError:需要多于 1 个值才能解包
有谁知道它是做什么的,或者有与它相关的更具体的术语,我可以通过谷歌了解更多信息?
解决方案 1:
你可以谷歌搜索“tuple unpacking”。这可以在 Python 中的各个地方使用。最简单的是在赋值中:
>>> x = (1,2)
>>> a, b = x
>>> a
1
>>> b
2
在 for 循环中,其工作原理类似。如果可迭代对象的每个元素都是tuple
,那么您可以指定两个变量,循环中的每个元素都将解包为 2。
>>> x = [(1,2), (3,4), (5,6)]
>>> for item in x:
... print "A tuple", item
A tuple (1, 2)
A tuple (3, 4)
A tuple (5, 6)
>>> for a, b in x:
... print "First", a, "then", b
First 1 then 2
First 3 then 4
First 5 then 6
该enumerate
函数创建了一个可迭代的元组,因此可以这样使用。
解决方案 2:
Enumerate 基本上为您提供了在 for 循环中使用的索引。因此:
for i,a in enumerate([4, 5, 6, 7]):
print(i, ": ", a)
将打印:
0: 4
1: 5
2: 6
3: 7
解决方案 3:
您可以将该for index,value
方法与使用 直接解包元组的方法结合起来( )
。当您想在循环中设置几个相关值时,这种方法非常有用,这些值可以在没有中间元组变量或字典的情况下表达,例如
users = [
('alice', 'alice@example.com', 'dog'),
('bob', 'bob@example.com', 'cat'),
('fred', 'fred@example.com', 'parrot'),
]
for index, (name, addr, pet) in enumerate(users):
print(index, name, addr, pet)
印刷
0 alice alice@example.com dog
1 bob bob@example.com cat
2 fred fred@example.com parrot
解决方案 4:
以此代码为例:
elements = ['a', 'b', 'c', 'd', 'e']
index = 0
for element in elements:
print element, index
index += 1
您循环遍历列表并存储索引变量。enumerate()
做同样的事情,但更简洁:
elements = ['a', 'b', 'c', 'd', 'e']
for index, element in enumerate(elements):
print element, index
该index, element
符号是必需的,因为enumerate
返回一个解包为两个不同变量的元组( (1, 'a')
,, ...)。(2, 'b')
解决方案 5:
[i for i in enumerate(['a','b','c'])]
结果:
[(0, 'a'), (1, 'b'), (2, 'c')]
解决方案 6:
该enumerate
函数返回一个生成器对象,该对象在每次迭代时都会产生一个元组,其中包含元素的索引(i
),默认从开始编号0
,并与元素本身(a
)相结合,并且for
循环允许您方便地访问这些生成的元组的两个字段并为它们分配变量名。
解决方案 7:
简而言之,在 for 循环中从列表中解包元组是可行的。 enumerate() 使用当前索引和整个当前项创建一个元组,例如 (0, ('bob', 3))
我创建了一些测试代码来演示这一点:
list = [('bob', 3), ('alice', 0), ('john', 5), ('chris', 4), ('alex', 2)]
print("Displaying Enumerated List")
for name, num in enumerate(list):
print("{0}: {1}".format(name, num))
print("Display Normal Iteration though List")
for name, num in list:
print("{0}: {1}".format(name, num))
元组解包的简单性可能是我最喜欢 Python 的功能之一 :D
解决方案 8:
let's get it through with an example:
list = [chips, drinks, and, some, coding]
i = 0
while i < len(list):
if i % 2 != 0:
print(i)
i+=1
output:[drinks,some]
now using EMUNERATE fuction:(precise)
list = [chips, drinks, and, coding]
for index,items in enumerate(list):
print(index,":",items)
OUTPUT: 0:drinks
1:chips
2:drinks
3:and
4:coding
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件