挑战:关于一个元素的嵌套循环(不包括其

2024-05-20 19:53:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想有一个嵌套循环,内循环和外循环在同一个列表上迭代。同样在内环中,我不想和外环中有相同的元素。我还需要索引。你知道吗

直截了当的方法的一个例子

for i, line in enumerate(list_sentence):
        for j, line2 in enumerate(list_sentence):
            if i != j:
                if line in line2:
                    doing_stuff()

正如第2行告诉你的,i和j不是对称的,因为第2行和第2行不一样。一种可能的解决办法是使对称。你知道吗

你能写一个更python的解决方案吗?这个问题主要是出于好奇。我认为有一种方法是使用集合的产品,但这会降低代码的可读性。你知道吗


Tags: 方法in元素列表foriflinesentence
1条回答
网友
1楼 · 发布于 2024-05-20 19:53:51

对于这个特定的问题,itertools.permutations比我下面的建议要好。你知道吗

“隐藏”要循环的项的复杂选择的一种通用方法是 将forif移动到生成器中。这样,主代码和重要的“dou stuff()”部分保持不变。生成器中的docstring本身可以解释发生了什么,如果需要的话-

def check_lines(seq):
    for i, line1 in enumerate(seq):
        for j, line2 in enumerate(seq):
             if i == j:  # keep things flat
                 continue 
             if line1 not in line2:  
                 continue
             yield (line1, line2)

在主代码上:

for line1, line2 in my_permut(list_sentence):
    # do_stuff code can go directly here, in a "flat enough" place:
    ...

我已经用过几次了,我有一个类来表示棋盘游戏一样的结构(象棋或棋盘),或者一个图像,并使用__iter__方法立即产生x,y坐标和单元格内容,作为一个元组。你知道吗

而不是:

for x in board.width():
   for y in board.height():
      content = board[x, y]
      ...

代码变为:

for x, y, content in board:
    ...

相关问题 更多 >