Как не оценивать False / другие значения как 0 - PullRequest
0 голосов
/ 16 ноября 2018
def move_zeros(array):
    no_zero = [i for i in list(array) if i != int(0)]
    print(array)
    print(no_zero)

    for i in range(array.count(0)):
        no_zero.append(0)

    return no_zero

Это мой код, используемый для codeacademy kata, целью которого является перемещение всех нулей внутри массива списка в начало массива. Мой код работает по большей части, однако есть ситуации, когда код застревает, например, он видит False как ноль, а также такие значения, как 0.0, как мне изменить его так, чтобы он влиял на литеральное число 0

РЕДАКТИРОВАТЬ: был задан пример вывода предполагаемого алгоритма

move_zeros([false,1,0,1,2,0,1,3,"a"]) 
returns[false,1,1,2,1,3,"a",0,0]

тогда как мой код возвращает

[1, 1, 2, 1, 3, 'a', 0, 0, 0]

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Редактировать :

def move_zeros(array):
    result = array[:]
    # add here any false value you want
    false_values = [0, 0.0, "0", "0.0", False, ""]
    for i in result:
        if i in false_values:
            result.append(i)  # or "0" or "0.0"
            del result[result.index(i)]
    return result
0 голосов
/ 16 ноября 2018

False на самом деле 0, поскольку bool является подклассом int.

Хотя значение False является единичным, поэтому вы всегда можете проверить if i is False, чтобы дифференцироватьоно из 0.

Целое число 0 также является одиночным, но это деталь реализации, а не гарантия языка.Я бы предпочел не полагаться на это.

Чтобы исключить значение float 0.0, вы всегда можете проверить точный тип: if type(i) is int.Подклассы int не пройдут этот тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...