Python 使用zip在for循环中追加Numpy

Python 使用zip在for循环中追加Numpy,python,loops,for-loop,zip,Python,Loops,For Loop,Zip,我有两个不同的列表,分别包含一些x和z值。从这两个值中,我只需要取一些值,然后将x和z分布到不同的行中 到目前为止,我试过: 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) 从中,我希望x的1

我有两个不同的列表,分别包含一些
x
z
值。从这两个值中,我只需要取一些值,然后将
x
z
分布到不同的行中

到目前为止,我试过:

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)
从中,我希望
x
10,15,20
,以及
z
9,20,25
,但我只得到同一行的最后一个值(20和25)

a = [20, 25]

始终使用行中的最后一对覆盖数组

a = np.append(x_val, z_val)
在for循环之前的开始处创建一个数组,然后在上面的行中附加到该数组

因此,需要完整的工作代码(没有numpy,因为简单数组不需要它)


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

选项1,使用
numpy

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

[(10, 9), (15, 20), (20, 25)]
[(10, 9), (15, 20), (20, 25)]
[(10, 15, 20), (9, 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)]
[(10, 9), (15, 20), (20, 25)]
[(10, 15, 20), (9, 20, 25)]
选项3,另一种输出格式如下:

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

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

你在每次迭代中都会覆盖
a
,为什么要在这里使用numpy?@roganjosh,因为我被要求只与array@luigigi是的,我怎么能避免呢?我想你误解了这个要求。在Python中,“array”通常读作
np.array
,但通常相当于我们的列表,如果他们来自其他语言,人们通常会混淆这两种语言
np.append
将在
append
上对整个数组进行完整复制,因此构建这样的数组非常低效。您应该附加到列表,然后在末尾转换为数组