将 for 循环中的条件应用于列表列表中的每个元素

Apply condition in for loop to each element in a list of lists

我正在尝试查看数组中的每个值是否小于 0 然后输出 0,否则输出数字本身。输出必须与输入具有相同的维度。目前输入是 3 x 4,但输出是一个列表。如何获得相同的输出大小(3 x 4 数组)?

input = [[1,2,3,4],[4,5,-6,-7],[8,9,10,11]]
output= []
for i in input:
    if i < 0:
        value = 0
        output.append(value)
    else:
        value= i
        output.append(value)

您需要一个嵌套循环。

lists = [[1, 2, 3, 4], [4, 5, 6, 7], [8, 9, 10, 11]]
output = []
for l in lists:
    nested_list = []
    for i in l:
        if i < 0:
            nested_list.append(0)
        else:
            nested_list.append(i)

    output.append(nested_list)

此外,您不应将变量命名为 input,因为它会覆盖 input() 函数。

Python 的 NumPy arrays 是一种更有效的处理矩阵的方式,如果所有嵌套列表的大小都相同,则矩阵就是您所拥有的。如果我理解你的问题,你的例子可以简化为一行:

import numpy as np
inp = np.array([[-1,2,3,4],[4,5,-6,7],[8,9,-10,11]])
print (inp)
#[[ -1   2   3   4]
# [  4   5  -6   7]
# [  8   9 -10  11]]
inp[inp < 0] = 0 
print (inp)
# [[ 0  2  3  4]
# [ 4  5  0  7]
# [ 8  9  0 11]]

这是我的尝试:

l = [[1,2,3,4],[4,5,-6,-7],[8,9,10,11]]

res = [[x if x >= 0 else 0 for x in in_l] for in_l in l]

您不一定需要为此导入任何额外的库,否则就有点矫枉过正了。 Base python 提供了处理嵌套数据结构和条件操作的所有必要操作。

您可以在 python -

中结合使用列表理解和三元运算符来完成此操作
inp = [[1,2,3,4],[4,5,-6,-7],[8,9,10,11]]

[[0 if item<0 else item for item in sublist] for sublist in inp]

#|____________________|
#          |
#   ternary operator
[[1,2,3,4],[4,5,0,0],[8,9,10,11]]
  1. A list comprehension 将允许您避免 list.append() 并直接导致列表作为输出。请注意,您需要一个列出的列表理解,因为您想要遍历列表列表的元素。

  2. ternary operator[on_true] if [expression] else [on_false] 形式的条件表达式。这使您可以将条件 (if-else) 添加到要迭代的每个元素的列表理解中。