Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在三个可能不同长度的列表的每个位置找到最大的数字,并找到它们的总和?_Python_Python 3.x - Fatal编程技术网

Python 如何在三个可能不同长度的列表的每个位置找到最大的数字,并找到它们的总和?

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、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 = 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
中的每一个切掉一个元素,并存储为tuple
tup
。然后,我们选择要附加到
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])
。我用你代码的修改版本编辑了我的答案。