需要帮助了解此范围功能

时间:2020-08-18 04:57:27

标签: python-3.x numpy

我是一名新程序员,但我不理解:

np.array([range(i, i+3) for i in [2,4,6]])

我知道在range函数中有一个开始,停止和步进,但是这里的写法大不相同。

输出为3 * 3数组

234
456
678

我不知道这个数组是如何产生的。 I + 3是什么意思?是2,4,6 x值吗?在这种情况下,如果for循环到底在做什么呢?迭代了什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果我稍微破坏一下代码行,我可以告诉你发生了什么。

下面一行是列表理解,即return I,其中I设置为列表[2,4,6]中的每个数字。这将返回一个看起来像[2,4,6]的列表。因此,这实际上是没有用的,因为您没有在操作原始列表。

[I for I in [2,4,6]]

将其放在np.array()中时,它只是从列表中创建一个数组。

现在,使用以下代码,您将遍历2-5范围内的每个数字,但不包括5(5是I + 3)

for i in range(2,5):
     print(i)
2
3
4

您也可以

for i in range(2,5):
     print(np.array([range(2,4)]))
 
[[2 3]]
[[2 3]]
[[2 3]]

哪个循环执行3次,并打印一个数组,其中包含2-4的范围。

将所有内容组合在一起

[range(I, I+3) for I in [2,4,6]]

您要说的是,为列表[2,4,6]中的每个数字返回一个从该数字到该数字+ 3的范围,并将其放入一个列表中,该列表将返回

[range(2, 5), range(4, 7), range(6, 9)]

然后将其转换为数组以获取

array([[2, 3, 4],
       [4, 5, 6],
       [6, 7, 8]])

答案 1 :(得分:0)

np.array(                      # This is a numpy library's 2D data structure array.
    [
        range(i, i+3)          # range function which produces iterator from i to i+2 (exclusive of end) i.e. if i = 1, range(1, 4) will give [1, 2, 3]
        for i in [2,4,6]       # Basic list comprehension for loop
    ]
)