您尝试执行的操作将不起作用,因为您在迭代列表时正在修改列表。说当前的“指针”指向第一个元素。现在,您弹出第一个,因此指针位于第二个。但是,当循环前进时,指针将移至第三个指针,而第二个指针将被跳过。
似乎您想从列表中找到组合。您可以尝试其他几种方法:
最接近当前方法:使用
while
循环而不是for
循环while l:first = l.pop(0)for second in l: print(first, second)
或者,您可以仅迭代索引而不是列表本身:
for i in range(len(l)):for k in range(i+1, len(l)): print(l[i], l[k])
或者只是使用
itertools.combinations
import itertools
for first, second in itertools.combinations(l, 2):
print(first, second)
但是,您可以做得更好。由于您正在寻找一对加起来等于某个目标编号的数字,因此只需从目标中减去第一个即可获得第二个,然后查看第二个数字是否在数字列表中。使用a
set可以使查询在恒定时间内进行,从而将您的整体时间复杂度从O(n²)降低到O(n)。
numbers = set([1,2,5,8,13,15,26,38])target = 10for first in numbers: second = target - first if second > first and second in numbers: print(first, second)



