猿问

Python 3.6 vs Python 3.8.2 if 语句与'is' - 显示不同的结果

我有这个问题,我需要将每个 0 或 0.0 放在列表的后面,同时保存其他元素的顺序,例如:


move_zero([1,3,4,[],False,None,0,0,3,0.0,4])

将输出:


[1,3,4,[],False,None,3,4,0,0,0]

请注意,该函数特别是从 0.0 变为 0,这很好,这是它应该做的


现在,这是我对这个问题的看法:


def move_zeros(array):

   new_arr = []

   count_zero = 0

   for x in array:

       if (x is 0) or (x is 0.0):

           count_zero += 1

       else:

           new_arr.append(x)


   return new_arr + count_zero * [0]

但是由于某种我不能称之为原因的原因,它没有输入我输入的第一个 if 语句:


[9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9]

输出是:


[9, 0.0, 9, 1, 2, 1, 1, 0.0, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0]

它在 Python 3.6 上输出错误的列表而在 python 3.8.2 上它工作正常..(但是我需要为此使用 3.6)

我错在哪里?if 语句似乎没问题!


哔哔one
浏览 138回答 2
2回答

catspeake

但是由于某种我不能称之为原因的原因,它没有输入我输入的第一个 if 语句:您需要==用于比较值。is用于在 Python 中比较身份。有关Python中的vs的信息,请参阅此内容。==is尝试这个:def move_zeros(a):    r = [i for i in a if not isinstance(i, (float, int)) or str(i) not in ('0.0', '0')]    r += [0] * (len(a) - len(r))    return rprint(move_zeros([9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9]))输出:[9, 9, 1, 2, 1, 1, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

哆啦的时光机

尝试这个def move_zeros(a):    res = []    x = 0    for num in a:        if str(num) == '0.0' or str(num) == '0':            x += 1        else:            res.append(num)    return res + [0] * xprint(move_zeros([9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9]))输出:[9, 9, 1, 2, 1, 1, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
随时随地看视频慕课网APP

相关分类

Python
我要回答