C 嵌套在Python中的循环表示

C++ nested for loops representation in Python

本文关键字:循环 表示 Python 嵌套      更新时间:2023-10-16

我已经在C 和Java中编码了一段时间。我最近也开始在Python中进行编码。但是,我被困在Python的嵌套循环的情况下。我在C 中写下了以下代码。Python中它的等效代码是什么?

for(int i = 0; i<a.size();i++){
   for(int j = i; j<a.size();j++)
   {
       if a[i] != a[j]
          /*some code */
   }

}

我试图使用以下枚举,但失败:

for i, val in enumerate(lst):
    for j=i,val2 in enumerate(lst):
        if val != val2
            #some code

那么如何表示Python中的C 嵌套环?

import itertools
for val1, val2 in itertools.combinations(lst, 2):
    if val1 != val2:

combinations将在所有从列表中选择两个不同元素的情况下循环,这是您嵌套的循环所做的事情。请注意,您的第二个嵌套循环是在j=i上初始化的,但是第一种情况总是无法处理,因为它永远不会通过条件。

如果您真的需要这些索引,通常您不应该这样做:

for (i, val1), (j, val2) in itertools.combinations(enumerate(lst), 2):
    if val1 != val2:

如其他地方提到的,枚举会做一件事(提供索引)。它不会在您的列表中截断或跳过。如果您想使用枚举,一个选项是通过列表切片而不是完整列表,并使用start=关键字参数正确启动索引编号:

for i, val in enumerate(lst):
    for j, val2 in enumerate(lst[i:], start=i):
        if val != val2:
            #some code

enumerate函数没有启动索引,但是range在这种意义上会。应该注意的是,当enumerate(sequence, start=0)具有start参数时,它仅指定返回索引的开始,而不是访问列表的第一个索引。

因此您可以这样做:

n = len(lst)
for i in range(n):
    val = lst[i]
    for j in range(i, n):
        val2 = lst[j]
        if val != val2:
            #some code