如何创建一个函数,将列表作为输入并为每个大于 0.5 的值返回 1,如果小于 0.5 则返回 0?

问题描述

我有一个浮点列表,我想将其转换为包含 1 或 0 的列表,具体取决于它们是否大于某个值。

示例:

list=[0.4,0.6,0.7,0.3,0.2,0.8]

value=0.5

对于列表中的每个项目,我想将大于 0.5 的值更改为 1,将小于该值的值更改为 0。

我已经尝试过这个,但一直得到一个 nonetype 对象,我将无法在以后的计算中使用它。

    def fun1(list,value):
            for i in list:
                    if i > value
                            print(int(1))
                    if i < value
                            print(int(0))

我在列表中得到了正确的数字 [0,1,1];但是,它说类型是无。我希望它们是列表中的整数值,以便以后可以使用它们进行计算。我可能做错了什么?有什么建议吗?

解决方法

这可以使用 list comprehension 轻松完成。我强烈建议阅读并熟悉这个 Pythonic 约定。

例如:

output = [1 if i >= 0.5 else 0 for i in mylist]

输出:

[0,1,1]
,

这是我想出的:

my_list = [0.2,23.2,0.5,0.4,1.2,.23,]

def my_function(in_list):
    out_list = []

    for number in in_list:
        if number <= 0.5:
            out_list.append(0)
            continue
        out_list.append(1)
    
    return out_list

print(my_function(my_list)) # returns [0,0]

代码分解:

    out_list = []

我们需要将 out_list 初始化为一个数组,以便我们以后可以在其上使用 append()

        if number <= 0.5:
            out_list.append(0)
            continue

这将取任何小于或等于零的值,并将其添加到列表中。然后我们使用 continue 让它回到 for 循环的开始。
注意:这也可以不用 continue 而是用 elseelif 来完成,这只是我为这个答案选择的方法。

        out_list.append(1)

仅当数字大于 0.5 时才会调用此方法。它将 out_list

加 1 ,
def greater_than(values,target):
    result = []
    for value in values:
        result.append(int(value > target))
    return result

values = [0.4,0.6,0.7,0.3,0.2,0.8]
result = greater_than(values,0.5)

或者,作为列表推导式:

values = [0.4,0.8]
result = [int(value > 0.5) for value in values]