如何将python列表或numpy数组中的所有非零元素移到一边?
我将对列表或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的内置排序看起来很稳定,所以其他值将保持其相对位置 例如: >
[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的解决方案中防止这些内存: