我如何只将零移动到列表的末尾,而在python中不为False

问题描述 投票:1回答:4
def move_zeros(array):
    for element in array:
        if element == 0 and type(element) is not bool:
            array.append(array.pop(array.index(element)))
    return array

print(move_zeros([False,1,0,1,2,0,1,3,"a"]))

我的结果是[1, 1, 2, 1, 3, 'a', False, 0, 0]我不希望False移动,我的程序将False视为0。

def move_zeros(array):对于数组中的元素:如果element == 0并且type(element)不是bool:array.append(array.pop(array.index(element)))返回数组print(move_zeros([ ...

python
4个回答
7
投票

之所以这样,是因为您在循环浏览列表时在列表上进行操作,以及已经正确识别的问题,在Python中False == 00 == 0均为True。一种解决此问题的方法如下,使用is而不是==来检查与0的相等性:


0
投票

您可以将False保存为字符串。则它不被视为0。将您的代码更改为:


0
投票

更改:


0
投票

这会在末尾进行“零”的就地改组,从而浪费O(1)空间和O(n)时间复杂度。

© www.soinside.com 2019 - 2024. All rights reserved.