在python中使用for循环将两个列表切分为相同大小

2024-10-04 05:23:13 发布

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

你好,我想用for循环从现有列表创建两个新列表。我知道通过切片列表可以得到结果,但是我有一个超过1000个条目的大列表,所以通过计算索引来切片不是很可靠。 我正在学习python,所以可能还有其他我不知道的方法,所以如果有人能解决我的问题,我将不胜感激。你知道吗

所以我有两张单子:

 a=np.linspace(1,10,30)
 b=np.linspcae(0,6,30)

 a
array([  1.        ,   1.31034483,   1.62068966,   1.93103448,
         2.24137931,   2.55172414,   2.86206897,   3.17241379,
         3.48275862,   3.79310345,   4.10344828,   4.4137931 ,
         4.72413793,   5.03448276,   5.34482759,   5.65517241,
         5.96551724,   6.27586207,   6.5862069 ,   6.89655172,
         7.20689655,   7.51724138,   7.82758621,   8.13793103,
         8.44827586,   8.75862069,   9.06896552,   9.37931034,
         9.68965517,  10.        ])


 b
array([ 0.        ,  0.20689655,  0.4137931 ,  0.62068966,  0.82758621,
        1.03448276,  1.24137931,  1.44827586,  1.65517241,  1.86206897,
        2.06896552,  2.27586207,  2.48275862,  2.68965517,  2.89655172,
        3.10344828,  3.31034483,  3.51724138,  3.72413793,  3.93103448,
        4.13793103,  4.34482759,  4.55172414,  4.75862069,  4.96551724,
        5.17241379,  5.37931034,  5.5862069 ,  5.79310345,  6.        ])

所以我的代码是:

for i in a:
   if i >2.27-1. and i<2.27+1:
      print i

这给了我想要的元素

1.31034482759
1.62068965517
1.93103448276
2.24137931034
2.55172413793
2.86206896552
3.1724137931

但我也需要b中相应的元素。 i、 e

0.20689655
0.4137931
0.62068966
0.82758621
1.03448276
1.24137931
1.44827586

我如何从这里得到想要的结果。你知道吗


Tags: and方法代码in目的元素列表for
1条回答
网友
1楼 · 发布于 2024-10-04 05:23:13

在使用numpy时,尽量避免for循环,因为它速度更快,而且有点重要。你知道吗

mask = (a>1.27) & (a<3.27)
a[mask]
b[mask]

(a>1.27) & (a<3.27)只返回一个布尔数组,其中满足条件时值为True,其他地方值为False。通过将ab赋给这个数组,您将得到布尔数组的索引为True的值。你知道吗

编辑:

list(a[(a>1.27) & (a<3.27)])
list(b[(a>1.27) & (a<3.27)])

如果你真的想要一个列表返回。如果您在这个for循环中执行其他操作,那么您应该坚持使用for循环。你知道吗

相关问题 更多 >