首页 > 解决方案 > Python:创建一个比较 2 个数组并在 2 个数组之间插入较大元素的函数

问题描述

我正在尝试创建一个函数来比较 2 个数组并使用列表的最大元素创建一个新列表,而不使用 numpy。我设法创建了一个手动版本,但是在将其实现到函数中时遇到了问题。

任务:创建一个函数 maximum_arrays(a,b),它按元素比较数组 a 和 b,并返回一个包含较大元素的新数组。使用 insert2 函数将新元素添加到列表中。

示例:从将函数应用于数组 a=[12,5,8,19,6] 和 b=[3,6,2,12,4] 结果应该是 c=[12,6,8,19 ,6]。

当前代码:

list_a = [12,5,8,19,6]
list_b = [3,6,2,12,4]

maximum_arrays = []
for item in list_a:
    if list_b[item] > list_a[item]:
        maximum_arrays.insert(list_b[item])
    else:
        maximum_arrays.insert(list_a[item])

print(maximum_arrays)

手动版:

list_a = [12,5,8,19,6]
list_b = [3,6,2,12,4]
#answer example
c = [12,6,8,19,6]

#empty list
maximum_arrays = []

#for each part of the list, choose the highest number of the other list and insert
maximum_arrays.insert(0, max(list_a[0],list_b[0]))
maximum_arrays.insert(1, max(list_a[1],list_b[1]))
maximum_arrays.insert(2, max(list_a[2],list_b[2]))
maximum_arrays.insert(3, max(list_a[3],list_b[3]))
maximum_arrays.insert(4, max(list_a[4],list_b[4]))

print(maximum_arrays)

标签: pythonarrayslistfunctioninsert

解决方案


max在压缩列表上的列表理解中使用,或numpy.max.

list_a = [12,5,8,19,6]
list_b = [3,6,2,12,4]

max_array = [max(i) for i in zip(list_a, list_b)]

print(max_array)

这里的解释是:zip将 n 个可迭代对象变成元组上的迭代器,其中每个元组都有n项。因此,在两个列表的情况下,zip([1, 2, 3], [4, 5, 6])变成((1, 4), (2, 5), (3, 6))。将max所有这些元组中的一个给你你的列表。

一个重要的警告,也让我多次感到困惑的是,生成的元组的数量zip. 换句话说,zip当传递不同长度的迭代时不会抛出异常,并且只会在输入列表之一用完时停止。在这方面,它与 不同numpy.max,后者在给定不同长度的列表时会引发错误。


推荐阅读