我正在尝试编写一个简单的程序,该程序可以识别“列表列表”中具有相同“零”元素的列表。
我的尝试在下面。
由于我的构造考虑了例如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)
答案 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)