gpt4 book ai didi

python - 当给定一个字母序列时,从给定列表中找到最接近的

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:27 25 4
gpt4 key购买 nike

我正在编写一个电缆映射脚本,需要找到最近的开关。因此,如果配线架在机架 08AB 中,并且机架 08AC 和 08AD 中有一个开关,我需要它选择最近的(08AC)。问题是机架编号顺序。前两位数字始终相同 (08),字母递增。但是他们递增 A-Z,然后递增 AA-AZ。因此,如果面板位于机架 08Z 中,则 08AA 比 08X 更近。

我通过将字母转换为数字并查看哪个最接近来实现这一点,但它看起来很笨拙,我想知道是否有更好的方法:

###CLOSEST SWITCH IS IN 08AA
full_panel_location = '08Z'
full_switches_location = ['08X', '08AA']
switches_checksum = []


###REMOVE DIGITS AND CONVERT LETTERS TO CHECKSUM
panel_letters = ''.join([i for i in full_panel_location if not i.isdigit()])
panel_checksum = int(reduce(lambda x,y:x+y, map(ord, panel_letters)))
if panel_checksum > 100:
panel_checksum -= 39

for switch in full_switches_location:
switch_letters = ''.join([i for i in switch if not i.isdigit()])
switch_checksum = int(reduce(lambda x,y:x+y, map(ord, switch_letters)))
if switch_checksum > 100:
switch_checksum -= 39
switches_checksum.append(switch_checksum)

###FIND CLOSEST CHECKSUM/INDEX/SWITCH
closest_switch_checksum = min(switches_checksum, key=lambda x: abs(x - panel_checksum))
closest_switch_index = switches_checksum.index(closest_switch_checksum)

closest_switch = full_switches_location[closest_switch_index]


这提供了最接近的开关是 08AA,这正是我想要的。我的问题是,有没有更好的方法来做到这一点?

最佳答案

这基本上是一个 base 26 转换问题。逆序遍历一个位置的每个字母,将其与字母A的序数差乘以26次字母偏移量的幂得到校验和,用它可以计算到引用点的距离位置作为 min 函数的键:

def checksum(x):
s = 0
for i, c in enumerate(reversed(x)):
s += (ord(c) - ord('A') + 1) * 26 ** i
return s

full_panel_location = '08Z'
full_switches_location = ['08X', '08AA']
panel_checksum = checksum(full_panel_location[2:])
print(min(full_switches_location, key=lambda i: abs(checksum(i[2:]) - panel_checksum)))

这个输出:

08AA

关于python - 当给定一个字母序列时,从给定列表中找到最接近的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55535133/

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