首页 > 解决方案 > 使用 zip 在 for 循环中追加 Numpy

问题描述

我有两个不同的列表,分别包含一些xz值。从这两个中,我只需要获取一些值并将其分配xz不同的行。

到目前为止,我试过这个:

import numpy as np

x = [1, 3, 6, 10, 15, 20]
z = [3, 5, 6, 9, 20, 25]

for x_val, z_val in zip(x, z):
    if x_val > 6 and z_val > 6:
        a = np.append(x_val, z_val)

我希望从中10, 15, 20得到x9, 20, 25z但我只得到同一行的最后一个值(20 和 25)。

a = [20, 25]

标签: pythonloopsfor-loopzip

解决方案


老实说,我对您的预期输出不是 100% 清楚(也许更新问题以包括在内)。我在下面给出了几个不同的选项:

选项 1,使用numpy

a = np.array(x+z)
result = list(zip(*a[a>6].reshape(2, -1)))

输出:

[(10, 9), (15, 20), (20, 25)]

选项 2,如果你不想使用 numpy,你可以这样做:

result = [(x_, z_) for x_, z_ in zip(x, z) if all([x_>6, z_>6])]

输出:

[(10, 9), (15, 20), (20, 25)]

选项 3,另一种输出格式可以完成为:

result = list(zip(*[(x_, z_) for x_, z_ in zip(x, z) if all([x_>6, z_>6])]))

输出:

[(10, 15, 20), (9, 20, 25)]

推荐阅读