Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在给定特定条件的情况下,为列表元素指定布尔值_Python_List_Boolean - Fatal编程技术网

Python:在给定特定条件的情况下,为列表元素指定布尔值

Python:在给定特定条件的情况下,为列表元素指定布尔值,python,list,boolean,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指定给所有被屏蔽的值,将1指定给所有其他值。

假设您有以下列表:

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指定给所有被屏蔽的值,将1指定给所有其他值。你怎样才能做好呢

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

mylist=[1 for i,v in enumerate(mylist) if type(mylist[i]) is float]
结果应为数字无真/假:

mylist=[1,1,1,0,0]
编辑

我的原始列表中存在的屏蔽值的类型为numpy.ma.core.MaskedConstant。

如下所示:

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]
还要注意,如果typemylist[i]是float,那么您的列表理解mylist=[1代表enumeratemylist中的i,v]与您描述的不完全一样;至少在一般情况下不是这样。您将1分配给任何不是浮动的对象,这与任何被“屏蔽”的对象不同

还要注意的是,当像[1代表i,v在enumeratemylist中,如果typemylist[i]是float]这样循环时,您是错误的,请进一步了解不要使用v,这样您就可以重写为[1代表i,uu在enumeratemylist中,如果typemylist[i]是float]。请注意下划线。它用于暗示您将转储enumerate返回的元组的第二项

最后,我说的是错误的,因为在你的列表中,我的列表[i]可以被v代替。因此,如果正确地完成,它的编写方式是:[1代表mylist中的v,如果typev是float]。但正如我所说,这与您似乎想要的略有不同。

您可以尝试以下方法:

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

检查变量类型的相关函数为:

此外,当您正确使用枚举构造时,您已经使用变量v在值上循环,因此无需通过mylist[i]访问它。

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

[int(isinstance(x,float)) for x in mylist]
注意,之所以这样做是因为numpy.ma.core.MaskedConstant不是浮点。

您可以在此处使用映射函数:

>>> list(map(lambda x : 0 if isinstance(x,np.ma.core.MaskedConstant) else 1 , mylist))

[1,1,1,0,0]

你看不到这个答案,所以我经常给出它,尽管其他答案都是令人满意的。定义一个函数f

现在做列表理解

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

事实上,我忘记了一件重要的事情,关于蒙面实例的类型。它们是numpy.ma.core.MaskedConstant,而不是字符串。因此,您的方法无法按现在的方式工作。@CF84现在您的解决方案更有意义了。我将阅读一些关于这些的内容,并编辑我的回答。我实际上忘记了一件关于隐藏实例类型的重要事情。它们是numpy.ma.core.MaskedConstant,而不是字符串。因此,您的方法不能像现在这样工作。我的方法应该可以工作,因为它不依赖字符串比较。我得到的结果是一个0值列表。没有别的了。我不明白为什么请尝试第二种方法简单的打字错误,应该是v。现在修好了谢谢,这真的很有帮助,因为它可以透视事物并提醒我函数的存在。然而,考虑到我正在编写的代码很长,我发现遵循列表理解方法更合适。@CF84这是列表理解方法。
mylist = [f(x) for x in mylist]