for循环中不同大小数组上的函数

2024-05-05 19:17:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不同大小的数组,我想在for循环中对它们执行逻辑函数。例如,如果我有:

array1 = [6,7,8]
array2 = [1,2,3,4,5]

我想把array1的每个元素减去array2的每个元素

[6-1,6-2,6-3,6-4,6-5],[7-1,7-2,7-3,7-4,7-5],[8-1,8-2,8-3,8-4,8-5]

也就是从array1的每个元素减去array2的每个元素

所以我试着做一个for循环,比如:

for i in range(len(array1)):
    ar = array1[i]-array2

还有

for i in range(len(array1)):
    for j in range(len(array2)):
        ar = array1[i]-array2[j]

但这两个似乎都不起作用

第一种方法似乎是返回正确形状的数组,但肯定不是正确的值。你知道吗

我希望它以不同的数组返回,因为实际上,我的样本量非常大。你知道吗


Tags: 方法函数in元素forlenrange数组
3条回答

循环解决方案:

array1 = [6, 7, 8]
array2 = [1, 2, 3, 4, 5]

arr = []
for i in array1:
    tmp = []
    for j in array2:
        tmp.append(i - j)
    arr.append(tmp)

print(arr)

输出:

[[5, 4, 3, 2, 1], [6, 5, 4, 3, 2], [7, 6, 5, 4, 3]]

以下解决方案应使用列表理解:

result = []
for value1 in array1:
    result.append([value1 - value2 for value2 in array2])

您甚至可以在一行中使用两个for循环来编写这个列表:

result = [[value1 - value2 for value2 in array2] for value1 in array1]

我们可以用itertools.product来解决这个问题

from itertools import product
from operator import sub

final = []
for item in array1:
    prods = product([item], array2)
    subs = [sub(*p) for p in prods]
    final.append(subs)

print(final)
# [[5, 4, 3, 2, 1], [6, 5, 4, 3, 2], [7, 6, 5, 4, 3]]

它的工作原理是product以元组的形式返回两个数组的笛卡尔积,因此:

(6, 1), (6, 2), etc....

然后我们简单地使用列表理解将sub函数应用于每个元组。你知道吗

相关问题 更多 >