我有一个关于python中的循环和可迭代项的快速问题。 我有一个数据框(DF)和以下循环:
for i, col in DF.iteritems():
print(i)
print(col)
我不确定我是否正确理解了可迭代项目的工作原理。 python如何知道 i 是数据框DF的变量名,而 col 对应于行?
我试图寻找一些关于此的文献,但找不到任何有用的东西。任何人都可以向我解释这个吗?
谢谢
答案 0 :(得分:0)
iteritems
给出了一个可迭代的元组
每次迭代都会从迭代中获取一个元组
变量i
将获得iterable中第一个值的值,col
将得到第二个值。
答案 1 :(得分:0)
DF.iteritems()
为每次迭代产生包含在元组中的两个对象。 Python允许您将其解压缩为多个变量。
换句话说,你发布的内容是有效的,因为开发人员read the documentation并且知道每个DF.iteritems()
元素都是一个内部有两个对象的可迭代元素。
您还可以将此类对象分配给单个变量:
for name_and_col in DF.iteritems():
print(name_and_col)
之后或解包那个元组:
for name_and_col in DF.iteritems():
i, col = name_and_col
因为for
循环中的目标与常规分配中的目标相同。
Python本身并不需要知道任何事情。作为程序员,您只需告诉它将迭代中的每个项目解压缩为两个名称。如果有超过2个元素,或者只有一个元素,或者该项不可迭代,则Python会抛出异常。
您可以构建自己的列表来代替数据框:
>>> demo = [
... ('foo', 42),
... ('bar', 'Eric Idle'),
... ('spam', 3.145)
... ]
>>> for first, second in demo:
... print(first)
... print(second)
... print()
...
foo
42
bar
Eric Idle
spam
3.145
这很有效,因为demo
列表中的每个元素本身都是一个包含两个值的元组。我们可以选择不解包:
>>> for both in demo:
... print(both)
...
('foo', 42)
('bar', 'Eric Idle')
('spam', 3.145)
但如果我们尝试解压更多,我们会收到错误:
>>> for first, second, third in demo: # won't work, not enough elements
... print(first, second, third)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)
或者如果我们尝试解压缩其他内容,我们也会收到错误:
>>> list_of_integers = [42, 81, 117]
>>> for first, second in list_of_integers:
... print(first, second)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable