对列表中的所有项目进行迭代功能

时间:2020-03-25 07:14:29

标签: python

考虑包含各种要点的列表

l=[(point1,point2),(point3,point4),....,(point 2n-1, point 2n)]

现在我们有一个计算点之间距离的函数

distance(point1,point2)

如何对列表中的所有点应用该功能?

3 个答案:

答案 0 :(得分:4)

您可以使用itertools.starmap

from itertools import starmap

list(starmap(distance, l))

或只是一个list comprehension

[distance(*p) for p in l]  # hence the name `starmap`

如果您实际上是在寻找任意一对点(坐标对)的距离,则可以使用itertools.product

from itertools import starmap, product

list(starmap(distance, product(l, repeat=2)))
# or
[distance(*points) for points in product(l, repeat=2)]

如果您不想将点与自己配对并且不关心顺序(毕竟,“距离”表示对称性),请使用combinations

from itertools import starmap, combinations

list(starmap(distance, combinations(l, 2)))

答案 1 :(得分:0)

压缩列表切片并使用列表理解

distances = [distance(p1, p2) for p1, p2 in list(zip(l, l[1:]))]

list(zip(l, l[1:]))的作用是什么?它结合了两个相邻的元素

>>> l = [(0,1), (1,2), (2,3), (3,4)]
>>> list(zip(l, l[1:]))
[((0, 1), (1, 2)), ((1, 2), (2, 3)), ((2, 3), (3, 4))]

答案 2 :(得分:0)

您可以使用一个简单的for循环:

result = []

for p1, p2 in l:
    result.append(distance(p1,p2))