在基于python的索引中,for-each循环是否存在?

在基于python的索引中,for-each循环是否存在?,python,Python,我有一个相同类型对象的列表。我想迭代这个列表,删除其中达到特殊条件的对象。详情如下: links = [{"source":0, "target":1}, ....] for link in links: if {"source":link["target"], "target":link["sourcec"]} not in links: links.remove(link) 但我发现for循环没有访问列表中的每个元素。所以我猜for循

我有一个相同类型对象的列表。我想迭代这个列表,删除其中达到特殊条件的对象。详情如下:

    links = [{"source":0, "target":1}, ....]
    for link in links:
        if {"source":link["target"], "target":link["sourcec"]} not in links:
            links.remove(link)

但我发现for循环没有访问列表中的每个元素。所以我猜for循环基于列表的索引。有没有一个好的方法来执行删除操作?

您可以创建一个新列表,它是原始列表的子集,然后丢弃原始列表

您可以创建一个新列表,它是原始列表的子集,然后丢弃原始列表

您可以创建一个新列表,它是原始列表的子集,然后丢弃原始列表

您可以创建一个新列表,它是原始列表的子集,然后丢弃原始列表

links = [{1:2, 2:4}]
for link in links:
    if {1:3, 5:6} not in links:
        links.remove(link)
links

>>> []
很好。你一定在做一些你没有预料到的事情。 在大多数情况下,您的逻辑很可能会清空您的列表。你希望第三行是“…不在链接中:”而不是“链接”吗

很好。你一定在做一些你没有预料到的事情。 在大多数情况下,您的逻辑很可能会清空您的列表。你希望第三行是“…不在链接中:”而不是“链接”吗

很好。你一定在做一些你没有预料到的事情。 在大多数情况下,您的逻辑很可能会清空您的列表。你希望第三行是“…不在链接中:”而不是“链接”吗

很好。你一定在做一些你没有预料到的事情。
在大多数情况下,您的逻辑很可能会清空您的列表。是否希望第三行是“…不在链接中:”而不是“链接”?

原因是您在迭代过程中修改了列表

如果您的列表没有那么大,您可以将其复制:

import copy

links = [{"source":0, "target":1}, ]
links_copy = copy.copy(links)
for link in links:
    if {"source":link["target"], "target":link["source"]} not in links:
        links_copy.remove(link)

links = links_copy

原因是您在迭代过程中修改了列表

如果您的列表没有那么大,您可以将其复制:

import copy

links = [{"source":0, "target":1}, ]
links_copy = copy.copy(links)
for link in links:
    if {"source":link["target"], "target":link["source"]} not in links:
        links_copy.remove(link)

links = links_copy

原因是您在迭代过程中修改了列表

如果您的列表没有那么大,您可以将其复制:

import copy

links = [{"source":0, "target":1}, ]
links_copy = copy.copy(links)
for link in links:
    if {"source":link["target"], "target":link["source"]} not in links:
        links_copy.remove(link)

links = links_copy

原因是您在迭代过程中修改了列表

如果您的列表没有那么大,您可以将其复制:

import copy

links = [{"source":0, "target":1}, ]
links_copy = copy.copy(links)
for link in links:
    if {"source":link["target"], "target":link["source"]} not in links:
        links_copy.remove(link)

links = links_copy

内置函数
过滤器
可以满足您的需要。这里有一种使用方法:

links = [{"source":0, "target":1},
         {"source":0, "target":2},
         {"source":0, "target":3},
         {"source":1, "target":0}]

links = filter(
    lambda link: {"source":link["target"], "target":link["source"]} in links,
    links)

print links
作为替代方案,您可以使用列表:

links = [link
         for link in links
         if {"source":link["target"], "target":link["source"]} in links
        ]
或者,正如其他人所指出的,您可以复制原始列表,并重复该副本:

for link in links[:]:
    if {"source":link["target"], "target":link["source"]} not in links:
        links.remove(link)

内置函数
过滤器
可以满足您的需要。这里有一种使用方法:

links = [{"source":0, "target":1},
         {"source":0, "target":2},
         {"source":0, "target":3},
         {"source":1, "target":0}]

links = filter(
    lambda link: {"source":link["target"], "target":link["source"]} in links,
    links)

print links
作为替代方案,您可以使用列表:

links = [link
         for link in links
         if {"source":link["target"], "target":link["source"]} in links
        ]
或者,正如其他人所指出的,您可以复制原始列表,并重复该副本:

for link in links[:]:
    if {"source":link["target"], "target":link["source"]} not in links:
        links.remove(link)

内置函数
过滤器
可以满足您的需要。这里有一种使用方法:

links = [{"source":0, "target":1},
         {"source":0, "target":2},
         {"source":0, "target":3},
         {"source":1, "target":0}]

links = filter(
    lambda link: {"source":link["target"], "target":link["source"]} in links,
    links)

print links
作为替代方案,您可以使用列表:

links = [link
         for link in links
         if {"source":link["target"], "target":link["source"]} in links
        ]
或者,正如其他人所指出的,您可以复制原始列表,并重复该副本:

for link in links[:]:
    if {"source":link["target"], "target":link["source"]} not in links:
        links.remove(link)

内置函数
过滤器
可以满足您的需要。这里有一种使用方法:

links = [{"source":0, "target":1},
         {"source":0, "target":2},
         {"source":0, "target":3},
         {"source":1, "target":0}]

links = filter(
    lambda link: {"source":link["target"], "target":link["source"]} in links,
    links)

print links
作为替代方案,您可以使用列表:

links = [link
         for link in links
         if {"source":link["target"], "target":link["source"]} in links
        ]
或者,正如其他人所指出的,您可以复制原始列表,并重复该副本:

for link in links[:]:
    if {"source":link["target"], "target":link["source"]} not in links:
        links.remove(link)

看起来您正在修改正在迭代的列表。这可能会导致跳过某些索引,因为删除元素时索引会发生移动。我认为这可以通过使用如下列表理解来解决:

list = [x for x in list if <condition>]
list=[x代表列表中的x如果]
有关更多信息:


编辑:在我写我的答案时,Rob似乎已经发布了一个带有列表理解的答案。当他介绍其他方法时,请参考他的

看起来您正在修改正在迭代的列表。这可能会导致跳过某些索引,因为删除元素时索引会发生移动。我认为这可以通过使用如下列表理解来解决:

list = [x for x in list if <condition>]
list=[x代表列表中的x如果]
有关更多信息:


编辑:在我写我的答案时,Rob似乎已经发布了一个带有列表理解的答案。当他介绍其他方法时,请参考他的

看起来您正在修改正在迭代的列表。这可能会导致跳过某些索引,因为删除元素时索引会发生移动。我认为这可以通过使用如下列表理解来解决:

list = [x for x in list if <condition>]
list=[x代表列表中的x如果]
有关更多信息:


编辑:在我写我的答案时,Rob似乎已经发布了一个带有列表理解的答案。当他介绍其他方法时,请参考他的

看起来您正在修改正在迭代的列表。这可能会导致跳过某些索引,因为删除元素时索引会发生移动。我认为这可以通过使用如下列表理解来解决:

list = [x for x in list if <condition>]
list=[x代表列表中的x如果]
有关更多信息:


编辑:在我写我的答案时,Rob似乎已经发布了一个带有列表理解的答案。请参考他的,因为他提出了其他方法

一个例子会更好。如果你想删除任何没有返回链接的链接,那么虽然不建议更新列表,但你正在迭代的列表应该可以。。。您是否可以共享预期的输出和任何错误。请提供一个简短、完整的程序来演示您遇到的问题。我发现,当循环遍历列表时,它会在执行删除操作后跳过一些元素。因此,我想知道python中的for-each循环是否是基于索引的示例会更好。如果您希望删除任何没有返回链接的链接,那么虽然不建议更新列表,但您正在迭代的列表应该可以。。。您能否分享预期的输出和任何错误。请提供一个简短、完整的程序来演示您遇到的问题