itertools是Python中的一个模块,具有用于处理迭代器的函数集合。它们非常容易地遍历列表和字符串之类的可迭代对象。 starmap()是这样的itertools函数之一。
注意:有关更多信息,请参阅Python Itertools。
starmap()函数
当一个可迭代项包含在另一个可迭代项中并且必须在其上应用某些函数时,starmap()
用来。的starmap()
将另一个迭代中的每个迭代元素视为一个单独的项目。它类似于map()
。此函数在终止迭代器类别下。
用法:
starmap(function, iterable)
该函数可以是一个内置,也可以是用户定义的,甚至可以是lambda函数。要了解map()和starmap()之间的区别,请查看下面的代码段:
li =[(2, 5), (3, 2), (4, 3)]
new_li = list(map(pow, li))
print(new_li)
TypeError Traceback (most recent call last) in 1 li=[(2, 5), (3, 2), (4, 3)] ----> 2 new_li=list(map(pow, li)) 3 print(new_li) TypeError:pow expected at least 2 arguments, got 1
在这里,映射将列表中的每个元组视为单个参数,因此会引发错误。 starmap()解决了此问题。查看下面的代码片段:
from itertools import starmap
li =[(2, 5), (3, 2), (4, 3)]
new_li = list(starmap(pow, li))
print(new_li)
[32, 9, 64]
starmap()的内部工作可以如下实现。
def startmap(function, iterable): for it in iterables: yeild function(*it)
这里的“ it”也表示可迭代。
让我们看另一个区分map()和starmap()的示例。我们可以使用map()将函数应用于可迭代对象中的每个元素。要说我们需要在列表中的每个元素上添加一个常数,可以使用map()。
li =[2, 3, 4, 5, 6, 7]
# adds 2 to each element in list
ans = list(map(lambda x:x + 2, li))
print(ans)
[4, 5, 6, 7, 8, 9]
如果我们想为列表的不同元素添加不同的数字怎么办?
现在,必须使用starmap()。
from itertools import starmap
li =[(2, 3), (3, 1), (4, 6), (5, 3), (6, 5), (7, 2)]
ans = list(starmap(lambda x, y:x + y, li))
print(ans)
[5, 4, 10, 8, 11, 9]
使用starmap()的实际示例:
考虑一个包含各种三角形坐标的列表。我们应该应用毕达哥拉斯定理,并找出哪个坐标形成一个直角三角形。它可以按以下方式实现:
from itertools import starmap
co_ordinates =[(2, 3, 4),
(3, 4, 5),
(6, 8, 10),
(1, 5, 7),
(7, 4, 10)]
# Set true if coordinates form
# a right-triangle else false
right_triangles = list(starmap(lambda x, y, z:True
if ((x * x)+(y * y))==(z * z)
else False, co_ordinates))
print("tuples which form right angled triangle:",
right_triangles, end ="\n\n")
print("The right triangle coordinates are:",
end ="")
# to print the coordinates
for i in range (0, len(right_triangles)):
if right_triangles[i]== True:
print(co_ordinates[i], end =" ")
tuples which form right angled triangle:[False, True, True, False, False]
The right triangle coordinates are:(3, 4, 5) (6, 8, 10)
注:本文由纯净天空筛选整理自erakshaya485大神的英文原创作品 Python – Itertools.starmap()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。