我在Python中有一个如下所示的列表:
myList = [(1,1),(2,2),(3,3),(4,5)]
我想用其他项目减去每个项目,如下所示:
(1,1) - (2,2)
(1,1) - (3,3)
(1,1) - (4,5)
(2,2) - (3,3)
(2,2) - (4,5)
(3,3) - (4,5)
预期结果将是一个包含答案的列表:
[(1,1), (2,2), (3,4), (1,1), (2,3), (1,2)]
我该怎么做?如果我使用for
循环来接近它,我可以存储前一个项目并将其与当时我正在使用的项目进行核对,但它并不真正起作用。
答案 0 :(得分:12)
使用带有元组解包的itertools.combinations
来生成差异对:
>>> from itertools import combinations
>>> [(y1-x1, y2-x2) for (x1, x2), (y1, y2) in combinations(myList, 2)]
[(1, 1), (2, 2), (3, 4), (1, 1), (2, 3), (1, 2)]
答案 1 :(得分:5)
你可以使用列表理解,np.subtract
来“减去”彼此的元组:
import numpy as np
myList = [(1,1),(2,2),(3,3),(4,5)]
answer = [tuple(np.subtract(y, x)) for x in myList for y in myList[myList.index(x)+1:]]
print(answer)
<强>输出强>
[(1, 1), (2, 2), (3, 4), (1, 1), (2, 3), (1, 2)]
答案 2 :(得分:1)
将operator.sub
与combinations
一起使用。
>>> from itertools import combinations
>>> import operator
>>> myList = [(1, 1),(2, 2),(3, 3),(4, 5)]
>>> [(operator.sub(*x), operator.sub(*y)) for x, y in (zip(ys, xs) for xs, ys in combinations(myList, 2))]
[(1, 1), (2, 2), (3, 4), (1, 1), (2, 3), (1, 2)]
>>>