Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果不是b==k,`[b代表x中的a代表a中的b==k]`是什么意思?_Python_Numpy_List Comprehension - Fatal编程技术网

Python 如果不是b==k,`[b代表x中的a代表a中的b==k]`是什么意思?

Python 如果不是b==k,`[b代表x中的a代表a中的b==k]`是什么意思?,python,numpy,list-comprehension,Python,Numpy,List Comprehension,我完全被难住了: indices = numpy.array([b for a in x for b in a if not b==k]) 在x是一个二维整数数组而k是一个整数的情况下,我应该如何阅读[b代表a中的a,x代表a中的b,如果b==k]?或者用括号来帮助我理解事物的优先顺序?这相当于: result = [] for a in x: for b in a: if not b == k: result.append(b) indices

我完全被难住了:

indices = numpy.array([b for a in x for b in a if not b==k])
x
是一个二维整数数组而
k
是一个整数的情况下,我应该如何阅读
[b代表a中的a,x代表a中的b,如果b==k]
?或者用括号来帮助我理解事物的优先顺序?

这相当于:

result = []
for a in x:
    for b in a:
        if not b == k:
            result.append(b)
indices = numpy.array(result)

您可以从左边阅读列表理解,然后将其写入单独的for循环。

它将
x
数组的一维展平(我认为该代码假定
x
是一个二维数组),并删除所有出现的整数
k
。例如:

>>> import numpy as np

>>> x = np.arange(20).reshape(4, 5)  # makes it a 2D array
>>> x
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> k = 4

>>> inds = np.array([b for a in x for b in a if not b==k])
>>> inds
array([ 0,  1,  2,  3,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
请注意,您的代码并没有真正使用强大而快速的NumPy功能。如果
x
是一个数组,您可以简单地使用:

>>> x[x!=k]  # make it 1D and keep only values != k
array([ 0,  1,  2,  3,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

可能是重复的谢谢你,@StefanPochmann。我对Python太陌生了,没有合适的词汇表来搜索重复项。这种顺序对我来说真的没有意义。感觉就像德国数字:
123
123
。我希望
[b代表a中的b代表x中的a,如果不是b==k]
@EricDuminil列表理解的结构与您将其作为循环的实
编写时的结构相同。首先是x中a的外部循环
,然后是a中b的内部循环
@EricDuminil,不幸的是OP在理解中没有使用换行符。我也认为它不那么可读。但是,始终存在
itertools.chain
,这使得双循环几乎不必要:
[itertools.chain.from_iterable(x)if item!=k]中的项对应项]
。但是如果使用
NumPy
x[x!=k]
甚至更好@EricDuminil如果使用换行符,看起来也很奇怪…:)我更多的是抱怨这种Python语法设计,而不是OP的代码。但是谢谢你的评论。不管怎样,我只是吹毛求疵。来自Ruby的列表理解让人耳目一新,但双重理解本可以更漂亮。关于新词,我在谈论循环的经典。带有新行的理解看起来确实很奇怪。