2024-10-06 07:49:35 发布
网友
假设你在二维空间中有一个点列表。我在找对称点。你知道吗
为此,我遍历我的点列表并应用对称操作。所以假设我对第一个点应用其中一个运算,在这个运算之后,它等于列表中的另一个点。这两点是对称的。你知道吗
所以我想从我正在迭代的列表中删除另一个点,这样我的迭代变量“I”就不会取这个值。因为我已经知道它和第一个点是对称的。你知道吗
我也看到过类似的帖子,但是它们删除了列表中一个他们已经使用的值。我想要的是删除后续值。你知道吗
一般来说,从正在迭代的列表中删除值是个坏主意。但是,还有其他方法可以跳过对称点。例如,如果以前见过对称点,则可以检查每个点:
for i, point in enumerate(points): if symmetric(point) not in points[:i]: # Do whatever you want to do
这里symmetric根据对称运算生成一个点。如果你的对称运算连接了两个以上的点,你就可以做到
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
无论对称点结果是真的,都将它们添加到一个集合中,因为集合维护唯一的元素并且查找是O(1),所以可以使用ifpoint not in set条件。你知道吗
O(1)
point not in set
if point not in s: #test for symmetry if symmetric: s.add(point)
一般来说,从正在迭代的列表中删除值是个坏主意。但是,还有其他方法可以跳过对称点。例如,如果以前见过对称点,则可以检查每个点:
这里
symmetric
根据对称运算生成一个点。如果你的对称运算连接了两个以上的点,你就可以做到无论对称点结果是真的,都将它们添加到一个集合中,因为集合维护唯一的元素并且查找是
O(1)
,所以可以使用ifpoint not in set
条件。你知道吗相关问题 更多 >
编程相关推荐