Python - 循环和可迭代项

时间:2017-10-25 15:48:39

标签: python

我有一个关于python中的循环和可迭代项的快速问题。 我有一个数据框(DF)和以下循环:

for i, col in DF.iteritems():
print(i)
print(col)

我不确定我是否正确理解了可迭代项目的工作原理。 python如何知道 i 是数据框DF的变量名,而 col 对应于行?

我试图寻找一些关于此的文献,但找不到任何有用的东西。任何人都可以向我解释这个吗?

谢谢

2 个答案:

答案 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