我想我没有搜索正确的关键字,所以没有创建一个现有的答案…。我试图得到一个相同长度的两个列表的最大值或最小值的最佳方法,取每个位置的最大值或最小值。
我的观点如下
Input A = 725324
Input B = 9341A&B的预期最大值为729344 (取该位置上的最大值)
我只对齐了两个数字以得到相同的数字,然后压缩了这两个字符串,然后被困在下面的列表…中。我要走的路是Max(L[1]),Max(L[2])…一直到Max(L[digits - 1]),但不确定用Python表示它的最佳方式是什么,以及这是否是正确的方法。
List = [(7, 0), (2, 0), (5, 9), (3, 3), (2, 4), (4, 1)]发布于 2022-02-26 07:09:24
您可以使用字符串填充str.rjust()正确地填充“较短”的数字:
a = 725324
b = 9341
a, b = map(str, (a, b))
w = max(map(len, (a, b)))
result = ""
for t in zip(a.rjust(w, "0"), b.rjust(w, "0")):
result += max(t)
result = int(result)输出:
729344发布于 2022-02-26 07:20:14
解决这个问题的一种方法是使用数学(除法和余数):
a = 725324
b = 9341
digits = 0
num = 0
while a != 0 or b != 0:
if a != 0 and b != 0:
num += 10 ** digits * max(a % 10, b % 10)
a //= 10
b //= 10
elif a != 0:
num += 10 ** digits * (a % 10)
a //= 10
else:
num += 10 ** digits * (b % 10)
b //= 10
digits += 1
print(num)使用此代码,我们将输入一个while循环,而或者a或b是非零的。
从这里,如果a和b都是非零的,那么我们就可以找到哪个数字有最大的最后一个数字,我们通过做% 10来计算。然后,我们将其放大,以便我们可以将其添加到一个总变量,即num,方法是存储我们添加的数字数、digits,并将10提高到digits的幂,并将该值乘以其余的值。
然后,如果只有a或b是非零的,但是不考虑其他变量,我们就执行相同的过程。
我希望这能帮上忙!如需进一步澄清或详情,请通知我:)
发布于 2022-02-26 07:50:03
下面是另一个使用divmod和幂为10的纯数值解:
def max_digit(A,B):
out = 0
exp = 0
if A < B: # ensure looping on the largest number
B,A = A,B
while A>0:
A,a = divmod(A,10) # get unit and shift
B,b = divmod(B,10)
out += (10**exp)*max(a,b)
exp += 1
return out
A = 725324
B = 9341
max_digit(A,B)
# 729344https://stackoverflow.com/questions/71274705
复制相似问题