Python:如何将每个负数变成零?

时间:2019-06-08 03:25:21

标签: python list for-loop append

我正在尝试一个练习,希望我返回一个包含除负数之外的所有相同元素的新列表,负数在返回的列表中变为零。

我使用了for循环遍历参数列表,如果数字小于0,我会将其附加到新列表中,但将其乘以0。但是,我得到了奇怪的输出,例如空列表。例如,下面的代码应打印:

  1. [0,0,9,0,0,34,1]

  2. [9,34,1]

  3. [0,0,0]

请继续使用列表方法。

代码:

def get_new_list_no_negs(num_list):
    new_list = []
    for i in range(len(num_list)):
        if i < 0:
            new_list.append(num_list[i] * 0)
    return new_list

def main():
    print("1.", get_new_list_no_negs([-3, -6, 9, 0, 0, 34, 1]))
    print("2.", get_new_list_no_negs([9, 34, 1]))
    print("3.", get_new_list_no_negs([-9, -34, -1]))
main()

3 个答案:

答案 0 :(得分:2)

这应该做:

def get_new_list_no_negs(num_list):
    return [max(num, 0) for num in num_list]

max函数是一个内置的python,它将在传递的数字之间返回最大的数字。

答案 1 :(得分:0)

尝试一下

l = [-2, -1, 0, 1, 2]

# this
l = [i for i in l if i > 0 else 0]
# or
l = [max(i, 0) for i in l]

答案 2 :(得分:0)

enumerate()函数为可迭代对象添加计数器。

因此,对于游标中的每个元素,都使用(计数器,元素)产生一个元组; for循环将其分别绑定到row_number和row。

l = [-2, -1, 0, 1, 2]

for index, value in enumerate(l):
    if value < 0:
        l[index] = 0

print(l)

O / P:

[0, 0, 0, 1, 2]