代码打印出2和3,因为它们的乘积等于变量num。但是,如果l = [1,3,4,5,6,7,8,9,10]怎么办?列表中没有数字乘以6,所以我想打印两个最接近的数字。
l=[1,2,3,4,5,6,7,8,9,10]
num=6
index=0
while index+1<len(l):
if l[index]*l[index+1]==num:
print(l[index],l[index+1])
index+=1
答案 0 :(得分:1)
要查找其乘积最接近num
的货币对的索引,您可以执行以下操作:
min((abs(x*y - num), i) for i, (x, y) in enumerate(zip(l, l[1:])))[1]
这使用生成器表达式和min()
查找乘积最接近num的对。在该链中是:
zip(l, l[1:])
为每个邻居对生成一个元组。然后enumerate
也用于生成索引。然后乘积的绝对值-num传递给min()
答案 1 :(得分:1)
您可以使用min
通过简单的表达式来做到这一点:
首先,我们使用zip
为连续元素构建迭代器:zip(l, l[1:])
然后我们使用min
,其中key
是距num
的距离:
min(zip(l, l[1:]), key = lambda x: abs(x[0]*x[1]-num))
如果l = [1,2,3,4,5,6,7,8,9,10]
输出:
(2, 3)
如果l = [1,3,4,5,6,7,8,9,10]
输出:
(1, 3)
如果您想获得更多的输出,请考虑以相同的方式使用sorted
来获得排名:
sorted(zip(l, l[1:]), key = lambda x: abs(x[0]*x[1]-num))
如果l = [1,3,4,5,6,7,8,9,10]
输出:
[(1, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10)]
如果l = [1,2,3,4,5,6,7,8,9,10]
输出:
[(2, 3), (1, 2), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10)]