从列表中查找唯一对

时间:2019-12-26 08:17:37

标签: python-3.x list

我有一个由数字组成的列表,我想从列表中找到唯一对,例如:

  
      
  1. x> y
  2.   
  3. x和y之间的序列中没有元素。
  4.   

x是该对中的第一个元素,y是第二个。

我的逻辑是:

  

遍历列表:i

     

再次遍历列表:j(嵌套循环)

     

从i迭代到j + 1:k

     

检查k是否在列表中

     

如果k在列表中->传递else print(list [i],list [j])

我的代码:

l=[15,10,1,8,5,1] 
l=sorted(l,reverse=True)
print(l)
res=[]

for i in range(len(l)):
  for j in range(len(l)):
    for k in range(l[j],l[i]+1):
      if k in l:
        #pass
        #print(l[i],l[j+1])
        #continue
        continue
      else:
        res.append((l[i],l[j]))
        #print(k)
        break


print(res)
  

预期输出:[(15,10),(10,8),(8,5),(5,1)]

     

我的输出:[(15,10),(15,8),(15,5),(15,1),(15,1),    (10,8),   (10,5),(10,1),(10,1),(8,5),

     

(8,1),(8,1),(5,1),(5,1)]

我的代码根本无法按预期进行锻炼。逻辑可能不对

1 个答案:

答案 0 :(得分:1)

解决方案非常简单,对数据进行排序时非常接近。您只需要进行一次迭代即可遍历数据。条件是检查是否没有到达终点并且x> y。

l=[15,10,1,8,5,1] 
l=sorted(l,reverse=True)
print(l)
res=[]
for i in range(len(l)):
    if i+1 < len(l) and l[i] > l[i+1]:
        res.append((l[i],l[i+1]))
print(res)