将 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]]
A list comprehension 将允许您避免 list.append()
并直接导致列表作为输出。请注意,您需要一个列出的列表理解,因为您想要遍历列表列表的元素。
ternary operator 是 [on_true] if [expression] else [on_false]
形式的条件表达式。这使您可以将条件 (if-else) 添加到要迭代的每个元素的列表理解中。
我正在尝试查看数组中的每个值是否小于 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]]
A list comprehension 将允许您避免
list.append()
并直接导致列表作为输出。请注意,您需要一个列出的列表理解,因为您想要遍历列表列表的元素。ternary operator 是
[on_true] if [expression] else [on_false]
形式的条件表达式。这使您可以将条件 (if-else) 添加到要迭代的每个元素的列表理解中。