簡體   English   中英

列表的最大/最小計算(Python)

[英]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)

使用此代碼,我們將在ab非零時進入while循環。

從那里,如果ab都不為零,那么我們找到哪個數字具有最大的最后一位,我們通過執行% 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM