如何使用python itertools模块

问题描述 投票:2回答:3

我有以下代码:

import itertools


x = ['Lebron' 'James']
y = ['is', 'the', 'goat']
z = ['is', 'not', 'the', 'goat']
itertools.chain(x, y)

并且我得到以下输出:itertools.chain at 0x104baab50

此输出是什么意思?以及如何查看该方法的结果?

然后下面的代码相同:

itertools.chain.from_iterable([x,y])

我得到以下输出:itertools.chain at 0x104af7550

这是什么意思?以及如何查看该方法的实际结果?我不太确定这两种方法之间有什么区别。

python functional-programming itertools
3个回答
2
投票

[itertools.chain返回一个迭代器,该迭代器将允许您通过for等在__next__循环中迭代这些值。

例如:

like a regular Python iterator

In [3]: import itertools ...: x = ['Lebron', 'James'] ...: y = ['is', 'the', 'goat'] ...: z = ['is', 'not', 'the', 'goat'] In [4]: for thing in x: ...: print('Thing is', thing) ...: Thing is Lebron Thing is James In [5]: for thing in itertools.chain(x, y): ...: print('Thing is', thing) ...: Thing is Lebron Thing is James Thing is is Thing is the Thing is goat 获取可迭代项(例如其他列表)的可迭代项(例如列表),然后依次迭代每个迭代项:

from_iterable

1
投票

简单地说,In [8]: for thing in itertools.chain.from_iterable([x, y]): ...: print('Thing is', thing) ...: Thing is Lebron Thing is James Thing is is Thing is the Thing is goat 不是函数;这是一个类型。像大多数类型一样,您在调用该类型的实例时会找回它。实例chain是可迭代的;它首先从chain(x,y)中产生元素,当它用尽x时,它从x中产生元素。

y是一个类方法;它的定义实际上与

相同
chain.from_iterable

假设您可以将def from_iterable(itr): return chain(*itr) 与任意迭代一起使用。


0
投票

您应该在*中看到有关itertools模块的更多信息。

此输出是什么意思?以及如何查看该方法的结果?

返回一个Python Docs对象。这是一个发电机。您可以通过这种方式查看结果(例如,使用itertools.chain循环遍历值):

for

或以此方式(从此迭代列表中列出):

for item in itertools.chain(x, y):
   print(item)

itertools.chain(* iterables)

这里您要传递several迭代器,以直接从函数参数中创建链:

print(list(itertools.chain(x, y)))

itertools.chain.from_iterable(iterable)

并且在这里,您传递一个single迭代器,该迭代器包含其他迭代器,用于从以下位置创建链:

itertools.chain(x, y)
© www.soinside.com 2019 - 2024. All rights reserved.