[英]Max / Min calculation for a list (Python)
我想我沒有搜索正確的關鍵字,所以最終沒有找到現有的答案……。 我正在嘗試獲取具有相同長度的 2 個列表的最大值或最小值的最佳方法,取每個 position 的最大值或最小值。
我到了一個點如下
Input A = 725324
Input B = 9341
A 和 B 的預期最大計算量為 729344(取該位置的最大數)
我只是將 2 個數字對齊為具有相同的數字,並壓縮了 2 個字符串,然后卡在了下面的列表中……我將采用的方式是Max(L[1])
, Max(L[2])
...一直到Max(L[digits - 1])
,但不確定在 Python 中表達它的最佳方式是什么,以及這是否是正確的方法。
List = [(7, 0), (2, 0), (5, 9), (3, 3), (2, 4), (4, 1)]
您可以使用字符串填充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)
Output:
729344
我們可以用於此問題的一種方法是使用數學(除法和余數):
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)
使用此代碼,我們將在a
或b
非零時進入while循環。
從那里,如果a
和b
都不為零,那么我們找到哪個數字具有最大的最后一位,我們通過執行% 10
來計算。 然后我們將它放大,以便我們可以將它添加到總變量num
中,方法是存儲我們添加的digits
,並將10
提高到digits
的冪並將該值乘以余數。
然后我們對 if only a
或 if only b
非零進行同樣的處理,但不考慮其他變量。
我希望這對您有所幫助:如果您需要任何進一步的說明或詳細信息,請告訴我 :)
這是另一個使用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)
# 729344
如果我很了解你的問題,那么這就是我的解決方案
def maximum_digits():
a = input("nummber a :")
b = input("nummber b :")
# finding the difference lenght between two number
c = len(a) - len(b)
# making a list of each digits in a number so 725324 >>> [7,2,5,3,2,4]
list_a = []
a=int(a)
while a > 0:
list_a.append(a % 10)
a //= 10
list_b = []
b=int(b)
while b > 0:
list_b.append(b % 10)
b //= 10
# making the two number have same lenght by adding zero
if a >= b:
for k in range(c):
list_b.append(0)
else:
for k in range(c):
list_a.append(0)
final_list = []
for i, j in zip(list_a, list_b):
if i > j:
final_list.append(i)
else:
final_list.append(j)
number = ""
for i in final_list[::-1]:
number += str(i)
return number
print(maximum_digits())
@ddejohn 的解決方案寫得更短:
a = 725324
b = 9341
a, b = map(str, (a, b))
w = max(map(len, (a, b)))
result = int("".join(max(t) for t in zip(a.rjust(w, "0"), b.rjust(w, "0"))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.