如何在python中的for循环中跳过下一次迭代?

时间:2017-02-02 16:46:10

标签: python

我有以下代码在图形顶点列表上运行广度优先搜索(bfs)。

目前我有代码在列表中的每个项目上运行bfs,但我想这样做,如果for循环中的下一项已经在已发现节点集中,那么for循环应该跳过它,因此不必在每个顶点上执行bfs。

我这样做的主要原因是因为我必须读取一个非常大的文件,因此当我在每个顶点执行bfs时会导致内存崩溃;我的代码适用于小型测试用例,但不适用于大型文件。

我知道continue语句允许你跳过当前的迭代,但是我无法想象如何跳过下一次迭代。

感谢任何帮助;谢谢。

def count_components(g):
    dictionary = {}
    dict_list = {}
    for i in g.vertices():
      dictionary = breadth_first_search(g,i)
      dictionary_keys = list(dictionary.keys())
      dict_list[i] = dictionary_keys
    for value in dict_list.values():
      for i in range(len(value)):
        value[i] = str(value[i])
    result = {}
    for key, value in dict_list.items():
      dict_list[key].sort(key=str.lower)
      if value not in result.values():
        result[key] = value
    count = len(result)
    return count

1 个答案:

答案 0 :(得分:4)

您选择的两个选项取决于您:

1)使用guard子句启动循环。这使您可以调用continue并跳过循环的迭代。

>>> values = [0,1,2,1,0]
>>> known = set([2])
>>> for i in values:
...   if i in known:
...     continue
...   print i
...   known.add(i)
...
0
1

2)在for语句中使用生成器:

>>> values = [0,1,2,1,0]
>>> known = set([2])
>>> for i in (x for x in values if not x in known):
...   print i
...   known.add(i)
...
0
1

哪个最好取决于你。