首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表的Max / Min计算(Python)

列表的Max / Min计算(Python)
EN

Stack Overflow用户
提问于 2022-02-26 07:00:23
回答 5查看 69关注 0票数 -1

我想我没有搜索正确的关键字,所以没有创建一个现有的答案…。我试图得到一个相同长度的两个列表的最大值或最小值的最佳方法,取每个位置的最大值或最小值。

我的观点如下

代码语言:javascript
复制
Input A = 725324
Input B = 9341

A&B的预期最大值为729344 (取该位置上的最大值)

我只对齐了两个数字以得到相同的数字,然后压缩了这两个字符串,然后被困在下面的列表…中。我要走的路是Max(L[1])Max(L[2])…一直到Max(L[digits - 1]),但不确定用Python表示它的最佳方式是什么,以及这是否是正确的方法。

代码语言:javascript
复制
List = [(7, 0), (2, 0), (5, 9), (3, 3), (2, 4), (4, 1)]
EN

回答 5

Stack Overflow用户

发布于 2022-02-26 07:09:24

您可以使用字符串填充str.rjust()正确地填充“较短”的数字:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
729344
票数 1
EN

Stack Overflow用户

发布于 2022-02-26 07:20:14

解决这个问题的一种方法是使用数学(除法和余数):

代码语言:javascript
复制
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循环,而或者ab是非零的。

从这里,如果ab都是非零的,那么我们就可以找到哪个数字有最大的最后一个数字,我们通过做% 10来计算。然后,我们将其放大,以便我们可以将其添加到一个总变量,即num,方法是存储我们添加的数字数、digits,并将10提高到digits的幂,并将该值乘以其余的值。

然后,如果只有ab是非零的,但是不考虑其他变量,我们就执行相同的过程。

我希望这能帮上忙!如需进一步澄清或详情,请通知我:)

票数 0
EN

Stack Overflow用户

发布于 2022-02-26 07:50:03

下面是另一个使用divmod和幂为10的纯数值解:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71274705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档