为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2022-10-06 16:11:20
我有这个问题,我需要将每个 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 语句似乎没问题!
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

但是由于某种我不能称之为原因的原因,它没有输入我输入的第一个 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 r


print(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]


查看完整回答
反对 回复 2022-10-06
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

尝试这个


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] * x


print(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]


查看完整回答
反对 回复 2022-10-06
  • 2 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号