Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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列表或numpy数组中的所有非零元素移到一边?_Python_List_Numpy - Fatal编程技术网

如何将python列表或numpy数组中的所有非零元素移到一边?

如何将python列表或numpy数组中的所有非零元素移到一边?,python,list,numpy,Python,List,Numpy,我将对列表或numpy数组执行以下操作: [0, 0, 0, 1, 0, 0, 4, 2, 0, 7, 0, 0, 0] 将所有非零移到右侧: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 7] 我怎样才能有效地做到这一点 谢谢 ============ 抱歉,我没有说清楚,我需要保留非零元素的顺序。您可以根据它们的布尔值对列表进行排序。所有falsy值(数字为零)将被推到列表的最前面。Python的内置排序看起来很稳定,所以其他值将保持其相对位置 例如: >

我将对列表或numpy数组执行以下操作:

[0, 0, 0, 1, 0, 0, 4, 2, 0, 7, 0, 0, 0]
将所有非零移到右侧:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 7]
我怎样才能有效地做到这一点

谢谢

============


抱歉,我没有说清楚,我需要保留非零元素的顺序。

您可以根据它们的布尔值对列表进行排序。所有falsy值(数字为零)将被推到列表的最前面。Python的内置排序看起来很稳定,所以其他值将保持其相对位置

例如:

>>> a = [0, 0, 0, 1, 0, 0, 5, 2, 0, 7, 0, 0, 0]
>>> sorted(a, key=bool)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 2, 7]

您可以按布尔值对列表进行排序。所有falsy值(数字为零)将被推到列表的最前面。Python的内置排序看起来很稳定,所以其他值将保持其相对位置

例如:

>>> a = [0, 0, 0, 1, 0, 0, 5, 2, 0, 7, 0, 0, 0]
>>> sorted(a, key=bool)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 2, 7]
使用NumPy:

>>> a = np.array([0, 0, 0, 1, 0, 0, 4, 2, 0, 7, 0, 0, 0])
>>> np.concatenate((a[a==0], a[a!=0]))
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 7])
通过使用简单的for循环,您也可以在Python中按时完成这项工作。但是会占用一些额外的内存,我们可以使用a.sortkey=bool在@grc的解决方案中防止这些内存:

使用NumPy:

>>> a = np.array([0, 0, 0, 1, 0, 0, 4, 2, 0, 7, 0, 0, 0])
>>> np.concatenate((a[a==0], a[a!=0]))
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 2, 7])
通过使用简单的for循环,您也可以在Python中按时完成这项工作。但是会占用一些额外的内存,我们可以使用a.sortkey=bool在@grc的解决方案中防止这些内存: