【问题标题】:why chain.from_iterable does not iterate over int list?为什么chain.from_iterable 不遍历int 列表?
【发布时间】:2018-06-03 06:10:05
【问题描述】:

为什么chain.from_iterable 给出的参数是sus(7) 时会出错,这是一个整数列表,而不是当[sus(7)] 传递给它时它工作得很好。

import itertools as p

def sus(n):

    a = []
    for i in range(n):
        a.append(i)
    return a

print(sus(7))

for i in p.chain(sus(7)):
    print('a1',i)
for i in p.chain.from_iterable(sus(7)):
    print('a2',i)

【问题讨论】:

  • 因为它需要一个iterable的iterable,而int的列表是int的iterable,而int是不可迭代的。查看文档中正确使用 itertools.chain.from_iterable 的示例可能会有所帮助。
  • 非常感谢。现在我明白了。

标签: python python-3.x itertools


【解决方案1】:

如果查看chain.from_iterable的来源:

def from_iterable(iterables):
# chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
    for it in iterables:
        for element in it:
            yield element

您可以看到它需要一个可迭代对象,例如一个可迭代对象列表。如果你有,例如,一个字符串列表,这很好用。但是,如果您的列表元素无法迭代,并且适用于任何数值(例如 int),则会抛出您遇到的错误。

【讨论】:

猜你喜欢
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多