嵌套循环,其中内部循环变量依赖于外部循环变量Python

时间:2018-01-03 22:17:38

标签: python loops

在Java中,如果我想创建嵌套循环,其中内部循环变量依赖于外部循环变量(例如,在典型的冒泡排序实现中),我可以这样做:

for(int i=0; i < n; i++){
     for(int j=i; j < n; j++){
         // Do something, e.g compare elements at index i and j
     }
}

在Python中实现这一目标的最“Pythonic”方法是什么?当我尝试将内部循环变量设置为外部循环变量时,我遇到了麻烦。例如,这不起作用:

for i in range(n):
     for j=i in range(n):
         # Do something, e.g compare elements at index i and j

4 个答案:

答案 0 :(得分:4)

for i in range(0, n):
    for j in range(i, n):
        #do something

答案 1 :(得分:3)

通常,for(i = a;i < b;i++)循环的Python等价物是for i in range(a, b)。将此问题应用于您的问题,即可获得

for i in range(0, n): # usually just range(n), but for consistency
  for j in range(i, n):
    # stuff

答案 2 :(得分:2)

在你添加的评论中,你说你想“比较索引i和j的元素”。通常,使用for循环来遍历索引并不是Pythonic。相反,只需循环遍历元素。例如,在某些情况下可以使用itertools.combinations来完成此操作。不要这样做:

for i in range(len(some_list)):
    for j in range(i+1, len(some_list)):
        compare(some_list[i], some_list[j])

相反,这样做:

for item1, item2 in itertools.combinations(some_list, 2):
    compare(item1, item2)

您是否可以在特定情况下执行此操作取决于您正在执行的操作。但问题是,在Python中,在尝试编写索引循环之前,首先应该考虑是否可以在元素上编写循环,并从代码中完全消除索引。

答案 3 :(得分:-2)

您可以按以下方式执行此操作:

i = 0
while i < n:
     j = i
     while j < n:
          # something
           j += 1
      i += 1
相关问题