gpt4 book ai didi

python - 在使用从列表中计算出最接近数字的代码时遇到问题

转载 作者:行者123 更新时间:2023-11-28 19:46:52 24 4
gpt4 key购买 nike

我正在编写一些代码,允许我从列表中选择最接近的数字,我已经设法做到了。但是,当找到最接近的数字并且它超过“myNumber”时,我希望 python 打印出它之前列表中的数字。

例如;

如果我有一个列表;

TwoN = [1,2,4,8,16,32,64,128,256,512, 1024, 2048, 4096, 8192]

myNumber = 30

我希望 python 打印 16 而不是 32

这是我到目前为止完成的代码...

TwoN = []
for i in range(12):
TwoN.append(2**i)
print(TwoN)

myNumber = 30
closest = TwoN[0]
for i in range(1, len(TwoN)):
if abs(TwoN[i] - myNumber) < abs(closest - myNumber):
closest = TwoN[i];


Sum = myNumber - closest
if Sum < 0:
closest = TwoN[(i-1)]
print(closest)
else:
print(closest)

当 myNumber = 30 时,程序将输出 1024,而我希望它输出 16..

感谢任何帮助

最佳答案

您可以使用带有条件的简单列表理解来过滤掉更大的数字并返回剩余数字中的最大值:

TwoN = [1,2,4,8,16,32,64,128,256,512, 1024, 2048, 4096, 8192]

def closestLowerNr(data,num):
"""returns from data the biggest number smaller/equal to num"""
return max( nr for nr in data if nr <= num) # get max of nr that are smaller/equal

print(closestLowerNr(TwoN,38))

if nr <= number丢弃任何大于所需数字的东西,max( ... )给你最大的剩余数。


您也可以只传递一次您的列表,并从中获取低于您的最高数字以及高于您的最小数字:

TwoN = []
for i in range(12):
TwoN.append(2**i)
print(TwoN)

myNumber = 32

belowMine = None
aboveMine = None

# this is almost always preferable to a range(len(list)) loop
for nr in TwoN: # if you really need an index use for i,v in enumerate(list):
if not belowMine or nr > belowMine: # get lower bound closest to myNumber
if nr < myNumber:
belowMine = nr
if not aboveMine or nr < aboveMine: # get upper bound closest to myNumber
if nr > myNumber:
aboveMine = nr

if nr == myNumber: # exact match, we are done
belowMine = nr
aboveMine = nr
break

if nr == myNumber:
print ("Found:",nr)
else:
print ("Closest numbers to ",myNumber," found:", belowMine,aboveMine)

输出:

[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
Found: 32
# or
Closest numbers to 30 found: 16 32

关于python - 在使用从列表中计算出最接近数字的代码时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50121314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com