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

时间:2016-09-09 09:35:17

标签: python python-2.7 loops iterator

想象一下,您在2D空间中有一个点列表。我试图找到对称点。

为此,我迭代我的点列表并应用对称操作。因此,假设我将其中一个操作应用于第一个点,并且在此操作之后它等于列表中的其他点。这两点是对称的。

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

我看过类似的帖子,但是他们删除了已经采用的列表中的值。我想要的是删除后续值。

2 个答案:

答案 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)