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