Python:给定一定条件

时间:2017-03-15 08:53:09

标签: python list boolean

假设您有以下列表:

import numpy as np

mylist=[8.4468975,
        8.52036,
        9.3605785,
        np.ma.core.MaskedConstant(),
        np.ma.core.MaskedConstant()]  

 # [8.4468975, 8.52036, 9.3605785, masked, masked]         

并且您希望将0分配给masked的所有值,并将1分配给所有其他值。你怎么能正确地做到这一点?

我试过这个,但结果是一个空列表:

mylist=[1 for i,v in enumerate(mylist) if type(mylist[i]) is float]

结果应为数字(无真/假):

mylist=[1,1,1,0,0]

修改

原始列表中显示的masked值属于numpy.ma.core.MaskedConstant类型。

5 个答案:

答案 0 :(得分:2)

像这样:

mylist=[8.4468975,
        8.52036,
        9.3605785,
        masked,
        masked]

mylist = [0 if type(x) is numpy.ma.core.MaskedConstant else 1 for x in mylist]

另请注意,您的列表理解mylist=[1 for i,v in enumerate(mylist) if type(mylist[i]) is float]并不完全符合您的描述;至少在一般情况下不是这样。您将1分配给任何非float的内容,这与'masked'的任何内容都不同。

另请注意,在使用[1 for i,v in enumerate(mylist) if type(mylist[i]) is float]进行循环时(错误地,请参见)不使用v,因此您可以将其重写为[1 for i,_ in enumerate(mylist) if type(mylist[i]) is float]。请注意下划线。它用于暗示您将转储 enumerate()返回的元组的第二项。

最后,我进一步错误地说,因为在你的列表中,mylist[i]可以用v代替[1 for v in mylist if type(v) is float]。如此正确地完成它将被写成:def appointments_for_includes Hash[appointments: [:customer, templates: :page]] end def associations_for_includes Hash[user: :contact, bundles: appointments_for_includes].merge(appointments_for_includes) end 。但正如我所说,这与你想要的略有不同。

答案 1 :(得分:2)

您可以使用int()将布尔值转换为整数:

[int(isinstance(x,float)) for x in mylist]

请注意这是有效的,因为numpy.ma.core.MaskedConstant()不是float

答案 2 :(得分:1)

你可以试试这个:

mylist = [1 if isinstance(v, float) else 0 for i,v in enumerate(mylist)]

或者,您可以这样做:

mylist = [0 if isinstance(v, np.ma.core.MaskedConstant) else 1 for i,v in enumerate(mylist)]

这样您只能将特定的蒙版类型设置为0。

检查变量类型的相关函数是:https://docs.python.org/2/library/functions.html#isinstance

此外,正如您(正确地)使用枚举构造一样,您已经使用变量v循环遍历值,因此无需访问mylist [i]。

答案 3 :(得分:1)

您可以在此处使用 void setProgressBar() { query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { loadingLayout.setVisibility(View.GONE); hasChilderen = dataSnapshot.hasChildren(); if (!hasChilderen) { noViewTxtView.setVisibility(View.VISIBLE); } query.removeEventListener(this); } @Override public void onCancelled(DatabaseError databaseError) { } }); } 功能:

ex_dict = {"test" : None}
ex_dict.get('test', 0)

答案 4 :(得分:1)

尽管其他答案令人满意,但您没有看到这个答案。定义函数f

def f(x):
    if isinstance(x, np.ma.core.MaskedConstant):
        return 0
    else:
        return 1

现在做列表理解

mylist = [f(x) for x in mylist]