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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。