我正在解决一个基本的python问题,我的任务是找到所有的三重奏点,它们是等距的。例如
points=[1,2,4,6,7,8]
res=[(1,4,7),(2,4,6),(4,6,8),(6,7,8)]
说明:
(1,4,7)-> 4-1 is equals to 7-4
(2,4,6)-> 4-2 is equals to 6-4
以此类推。
发布于 2022-09-15 14:49:26
试着没有图书馆。首先,创建一个字典,其中键是列表中所有数字对之间的差异,而作为集合的对被放置在与键关联的列表中。在第二阶段,一个键列表中的所有收集到的对都会被检查是否有交集。如果找到公共元素,则将集合的联合输入到结果列表中。
points = [1, 2, 4, 6, 7, 8]
d = {}
for n, i in enumerate(points):
for j in points[n + 1:]:
d.setdefault(abs(i - j), []).append({i, j})
out = []
for el in d.values():
for n, i in enumerate(el):
for j in el[n + 1:]:
if i.intersection(j):
out.append(i.union(j))
print(out)
[{8, 6, 7}, {1, 4, 7}, {2, 4, 6}, {8, 4, 6}]
发布于 2022-09-15 14:12:41
试试这个:
from itertools import combinations
res = []
for vals in combinations(points, 3):
p1, p2, p3 = sorted(vals)
if p2 - p1 == p3 - p2:
res.append((p1, p2, p3))
结果如下:
>>> res
[(1, 4, 7), (2, 4, 6), (4, 6, 8), (6, 7, 8)]
https://stackoverflow.com/questions/73732638
复制相似问题