如何将嵌套的for循环的迭代次数限制为仅循环计数器不同的情况?

时间:2019-04-24 23:33:42

标签: python for-loop nested-loops

我正在尝试编写一个简单的程序,该程序可以识别“列表列表”中具有相同“零”元素的列表。

我的尝试在下面。

由于我的构造考虑了例如i = 0,j = 1和i = 1,j = 0有所不同,最终我打印出所需列表的两倍。

我知道我可以使用list(set(indices_of_repeats))删除重复项,但这并不能真正直接解决潜在的问题,即我想了解如何为循环中的值设置条件计数器(是否是正确的术语?)相互之间相对应,而不是在不满足该条件的情况下进行迭代。

此外,我也欢迎提出任何建议,以更快,更优雅/更pythonic的方式编写该程序。

list = [[1,2], [2,3], [4,5], [4,6],[4,7]]

indices_of_repeats = []
for i in range(0,len(list)):
    for j in range(0,len(list)):
        if list[i][0] == list[j][0] and i !=j:
            indices_of_repeats.append(list[i])
print (indices_of_repeats)

编辑:

我想出了以下几点-可以奏效,但是欢迎提出更好的建议。

list = [[4,5],[1,2], [2,3], [4,6],[4,7]]
repeats = []
  for i in range(len(list)):
      for j in range(len(list)):
          if list[i][0] == list[j][0] and i!=j:
              repeats.append(list[i])
              break
print (repeats)

2 个答案:

答案 0 :(得分:0)

这很简单,因为每个组合只需要一个实例。只需启动内层循环计数器上方外层计数器:

for i in range(0, len(list)):
    for j in range(i+1, len(list)):
        if list[i][0] == list[j][0]:
            indices_of_repeats.append(list[i])

输出:

[(2, 3), (2, 4), (3, 4)]

这些是具有匹配的第一个元素的对的索引。     [[4,5],[4,5],[4,6]]

这不是特别描述性的:在每种情况下,您都打印匹配对的第一个元素。我怀疑您需要更好的东西,例如成对的索引:

            indices_of_repeats.append( (i, j) )

答案 1 :(得分:0)

这是一个简单的解决方案,仅在if中有一个附加条件。它效率不高,但是似乎没有要处理的数千个项目。

list = [[1,2], [2,3], [4,5], [4,6],[4,7]]

indices_of_repeats = []
for i in range(0,len(list)):
    for j in range(0,len(list)):
        if list[i][0] == list[j][0] and i !=j and list[i] not in indices_of_repeats:
            indices_of_repeats.append(list[i])
print (indices_of_repeats)