Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在迭代过程中更改下一个列表元素?_Python_Python 2.7_Loops_Iterator - Fatal编程技术网

Python 在迭代过程中更改下一个列表元素?

Python 在迭代过程中更改下一个列表元素?,python,python-2.7,loops,iterator,Python,Python 2.7,Loops,Iterator,假设您在二维空间中有一个点列表。我试图找到对称点 为此,我迭代我的点列表并应用对称操作。所以假设我对第一个点应用其中一个操作,在这个操作之后,它等于列表中的另一个点。这两点是对称的 所以我想从我正在迭代的列表中删除另一个点,这样我的迭代变量“I”就不会取这个值。因为我已经知道它和第一个点是对称的 我也看到过类似的帖子,但它们删除了列表中已经包含的一个值。我想要的是删除后续的值。一般来说,从正在迭代的列表中删除值是个坏主意。但是,还有其他方法可以跳过对称点。例如,如果以前见过对称点,则可以检查每个

假设您在二维空间中有一个点列表。我试图找到对称点

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

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


我也看到过类似的帖子,但它们删除了列表中已经包含的一个值。我想要的是删除后续的值。

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

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

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

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)
,如果
点不在集合中,则可以使用

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

无论对称点结果如何,都将它们添加到集合中,因为集合维护唯一的元素,并且查找是
O(1)
,如果
点不在集合中,则可以使用

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

您可以有一个单独的列表或集合来维护找到的点,并在每次迭代时检查
(如果不在
中)。请发布您迄今为止尝试过的内容?您可以有一个单独的列表或集合来维护找到的点,并在每次迭代时检查
(如果不在
中)。请发布您迄今为止尝试过的内容?这有一个线性关系复杂性。@garg10我认为它甚至是二次的,但我不确定有没有更快的方法。最糟糕的情况是没有对称点,因此对于每个点,您必须测试整个列表。最好的情况是所有的点都是对称的,然后我的解是线性的。这有一个线性的复杂性。@garg10我可能认为它甚至是二次的,但我不确定有没有更快的方法。最糟糕的情况是没有对称点,因此对于每个点,您必须测试整个列表。最好的情况是所有的点都是对称的,然后我的解是线性的。