Python 如何在三个可能不同长度的列表的每个位置找到最大的数字,并找到它们的总和?
我有三个输入。a1、a2和a3 例如,以下是一个输入: -1,-2,-3 -4-5-6-8-9 -10-11 输出为-23 因为当比较每个列表的第一个位置时,您会发现最大的数字是-1。然后是-2、-3、-8和-9 这是我到目前为止所拥有的。这个程序似乎可以很好地处理正数,但是当处理负数时,输出是不正确的。我上面给出的例子输出的是a-3而不是a-23。我该如何解决这个问题Python 如何在三个可能不同长度的列表的每个位置找到最大的数字,并找到它们的总和?,python,python-3.x,Python,Python 3.x,我有三个输入。a1、a2和a3 例如,以下是一个输入: -1,-2,-3 -4-5-6-8-9 -10-11 输出为-23 因为当比较每个列表的第一个位置时,您会发现最大的数字是-1。然后是-2、-3、-8和-9 这是我到目前为止所拥有的。这个程序似乎可以很好地处理正数,但是当处理负数时,输出是不正确的。我上面给出的例子输出的是a-3而不是a-23。我该如何解决这个问题 a1 = a1.split() a2 = a2.split() a3 = a3.split() length_one = l
a1 = a1.split()
a2 = a2.split()
a3 = a3.split()
length_one = len(a1)
length_two = len(a2)
length_three = len(a3)
longest_length = max(length_one, length_two, length_three)
if length_one < longest_length:
difference_one = longest_length - length_one
for i in range (difference_one):
a1.append('0')
if length_two < longest_length:
difference_two = longest_length - length_two
for i in range (difference_two):
a2.append('0')
if length_three < longest_length:
difference_three = longest_length - length_three
for i in range (difference_three):
a3.append('0')
for i in range (longest_length):
a1[i] = int(a1[i])
for i in range (longest_length):
a2[i] = int(a2[i])
for i in range (longest_length):
a3[i] = int(a3[i])
sumlist = []
for i in range (longest_length):
biggest_number = max(a1[i], a2[i], a3[i])
sumlist.append(biggest_number)
total = 0
for i in range (len(sumlist)):
total = total + sumlist[i]
return total
a1=a1.split()
a2=a2.split()
a3=a3.split()
长度=长度(a1)
长度2=长度(a2)
长度三=长度(a3)
最长长度=最大值(长度为1,长度为2,长度为3)
如果长度小于最长长度:
差异=最长长度-长度
对于范围内的i(差异为1):
a1.追加('0')
如果长度小于最长长度:
差分_-two=最长长度-长度_-two
对于范围内的i(差异2):
a2.追加('0')
如果长度三<最长长度:
差分三=最长长度-长度三
对于范围内的i(差异三):
a3.追加('0')
对于范围内的i(最长长度):
a1[i]=int(a1[i])
对于范围内的i(最长长度):
a2[i]=int(a2[i])
对于范围内的i(最长长度):
a3[i]=int(a3[i])
sumlist=[]
对于范围内的i(最长长度):
最大值=最大值(a1[i]、a2[i]、a3[i])
sumlist.append(最大\u编号)
总数=0
对于范围内的i(len(sumlist)):
总计=总计+汇总表[i]
返回总数
您的代码适用于正数,因为您将0
附加到较短的列表中,任何正数都将大于0
如果希望它适用于任意负数,我建议改为附加float('-inf')
。这是一个表示负无穷大的值,基本上任何数值变量x
,无论多么负,都将计算True
到x>浮点('-inf')
由于您要强制转换为int
,因此需要稍微修改代码,使其适用于float
:
a1=a1.split()
a2=a2.split()
a3=a3.split()
长度=长度(a1)
长度2=长度(a2)
长度三=长度(a3)
最长长度=最大值(长度为1,长度为2,长度为3)
如果长度小于最长长度:
差异=最长长度-长度
对于范围内的i(差异为1):
a1.追加(浮点('-inf'))
如果长度小于最长长度:
差分_-two=最长长度-长度_-two
对于范围内的i(差异2):
a2.追加(浮点('-inf'))
如果长度三<最长长度:
差分三=最长长度-长度三
对于范围内的i(差异三):
a3.追加(浮点('-inf'))
对于范围内的i(最长长度):
a1[i]=浮动(a1[i])
对于范围内的i(最长长度):
a2[i]=浮动(a2[i])
对于范围内的i(最长长度):
a3[i]=浮动(a3[i])
sumlist=[]
对于范围内的i(最长长度):
最大值=最大值(a1[i]、a2[i]、a3[i])
sumlist.append(最大\u编号)
总数=0
对于范围内的i(len(sumlist)):
总计=总计+汇总表[i]
返回总数
您可能希望使用。这就像是贪婪而不是懒惰
每次迭代都从a1
、a2
、a3
中的每一个切掉一个元素,并存储为tupletup
。然后,我们选择要附加到res
的最大值,并删除其余两个。然后我们在最后求和
from itertools import zip_longest
a1 = [-1, -2, -3]
a2 = [-4, -5, -6, -8, -9]
a3 = [-10, -11]
res = [max(tup) for tup in zip_longest(a1, a2, a3, fillvalue=float('-inf'))]
print(sum(res))
输出:
-23
最后一个循环可以替换为
total=sum(sumlist)
@Barmar谢谢你的提示!是否限制您使用内置函数,如max()
和sum()
?因为不使用它们似乎让事情变得更加困难了。@Barmar似乎是这样。我尝试了你给我的提示,程序输出只是给了我一个运行时错误。这适用于正数,因为你在每个列表中添加了0(任何正数都是>0
)。尝试附加浮点('-inf')
(表示负无穷大的值),而不是0谢谢!它也适用于正数吗?为什么不呢?正数大于负无穷大。这比我要发布的解决方案要好,它使用zip\u longest
的默认None
fill,然后在调用max()
时过滤掉它们,只要您正在寻找最小使用浮点('-inf')作为填充值,如果它是最大使用浮点值(‘inf’)作为填充值。如果输入长度之间的差异较大,并且要比较的输入数量较大,那么使用附加for循环的lazy zip*会更好,因为它的比较会更少。但是对于3个输入,这是最好的解决方案。感谢提示!它说我有溢出错误。它说我无法转换float无穷大到一个整数。有什么想法吗?@LucyL是你的代码int(float('-inf'))
?要解决这个问题,你需要将代码底部的int(a1[i])
转换为float(a1[i])
。我用你代码的修改版本编辑了我的答案。