在迭代期间更改下一个列表元素?

2024-10-06 07:49:35 发布

您现在位置:Python中文网/ 问答频道 /正文

假设你在二维空间中有一个点列表。我在找对称点。你知道吗

为此,我遍历我的点列表并应用对称操作。所以假设我对第一个点应用其中一个运算,在这个运算之后,它等于列表中的另一个点。这两点是对称的。你知道吗

所以我想从我正在迭代的列表中删除另一个点,这样我的迭代变量“I”就不会取这个值。因为我已经知道它和第一个点是对称的。你知道吗

我也看到过类似的帖子,但是它们删除了列表中一个他们已经使用的值。我想要的是删除后续值。你知道吗


Tags: 列表空间帖子对称点
2条回答

一般来说,从正在迭代的列表中删除值是个坏主意。但是,还有其他方法可以跳过对称点。例如,如果以前见过对称点,则可以检查每个点:

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

无论对称点结果是真的,都将它们添加到一个集合中,因为集合维护唯一的元素并且查找是O(1),所以可以使用ifpoint not in set条件。你知道吗

if point not in s:
    #test for symmetry
    if symmetric:
        s.add(point)

相关问题 更多 >