我有一个由数字组成的列表,我想从列表中找到唯一对,例如:
- x> y
- x和y之间的序列中没有元素。
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)]
我的代码根本无法按预期进行锻炼。逻辑可能不对
答案 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)