想象一下,您在2D空间中有一个点列表。我试图找到对称点。
为此,我迭代我的点列表并应用对称操作。因此,假设我将其中一个操作应用于第一个点,并且在此操作之后它等于列表中的其他点。这两点是对称的。
所以我想要的是从我正在迭代的列表中删除这一点,这样我的迭代变量说“i”不会取这个值。因为我已经知道它与第一点是对称的。
我看过类似的帖子,但是他们删除了已经采用的列表中的值。我想要的是删除后续值。
答案 0 :(得分:1)
通常,从正在迭代的列表中删除值是个坏主意。但是,还有另一种跳过对称点的方法。例如,如果您之前看过对称点,则可以检查每个点:
for i, point in enumerate(points):
if symmetric(point) not in points[:i]:
# Do whatever you want to do
此处symmetric
根据您的对称操作产生一个点。如果您的对称操作连接了两个以上的点,那么
for i, point in enumerate(points):
for sympoint in symmetric(point):
if sympoint in points[:i]:
break
else:
# Do whatever you want to do
答案 1 :(得分:1)
无论对称点是什么,都会将它们添加到集合中,因为集合维护了唯一元素,如果O(1)
条件,则可以使用point not in set
查找。
if point not in s:
#test for symmetry
if symmetric:
s.add(point)