如何编写一个用0替换数组中所有负数的函数。
这是我到目前为止所拥有的:
def negativesToZero(A):
for x in A:
if x < 0:
A.append(0)
else:
pass
print A
A = ([[1,-2],\
[-2,1]])
negativesToZero(A)
答案 0 :(得分:4)
由于A
是列表清单:
>>> A = [[1, -2], [-2, 1]]
>>> for lst in A:
... for i, val in enumerate(lst):
... lst[i] = max(val, 0)
>>> print A
[[1, 0], [0, 1]]
或者使用列表推导:
>>> A = [[max(val, 0) for val in lst] for lst in A]
答案 1 :(得分:1)
如果你想要一个数组操作,你应该创建一个合适的数组来开始。
A=array([[1,-2],[-2,1]])
像你这样的数组理解可以使用索引上的布尔运算进行单行处理:
A[A<0]=0
当然,您可以将其框架化为一个功能:
def positive_attitude(x):
x[x<0]=0
return x
print positive_attitude(A)
答案 2 :(得分:0)
浏览list
中的每个子列表。对于每个子列表,创建一个新的子列表,将任何负面项目转换为0
。最整洁的方式是理解:
A = [[1,-2], [-2,1]]
A = [[item if item >= 0 else 0 for item in l] for l in A]
结果:
[[1, 0], [0, 1]]
答案 3 :(得分:0)
这是一个递归实现,可以与任何类型的列表一起使用,其中包含任何类型的输入:
def convertToZero(arr):
for i in range(len(arr)):
if type(arr[i]) == int and arr[i] < 0:
arr[i] = 0
elif type(arr[i]) == list:
convertToZero(arr[i])
return arr
result = convertToZero( [[1,-2], ['hello',[-2,1]], [-1,'world']] )
print result
# [[1, 0], ['hello', [0, 1]], [0, 'world']]
答案 4 :(得分:0)
这是一个简单易懂的答案,与您在开始时尝试做的一致:
i++
如果你不想要不需要的内部打印语句,你可以添加一个输入变量(我将其称之为“#rec;&#39;”)给只进行非递归调用打印的函数:
def negativesToZero(A):
index = 0 #Track your index
for x in A:
if isinstance(x, list): #Calling the program recursively on nested lists
A[index] = negativesToZero(x)
elif x < 0:
A[index] = 0 #Makes negatives 0
else:
pass #Ignores zeros and positives
index += 1 #Move on to next index
print A
return A
<强>结果:强>
def negativesToZero(A, recur = False):
index = 0
for x in A:
if isinstance(x, list):
A[index] = negativesToZero(x, True)
elif x < 0:
A[index] = 0
else:
pass
index += 1
if recur == False: print A
return A
答案 5 :(得分:0)
import numpy as np
listOnums = np.random.normal(size = 300)
listOnums = listOnums.reshape(3,10,10)
def negToZero(arrayOnums):
'''
Takes an array of numbers, replaces values less than 0 with 0
and retuns an array of numbers.
'''
dims = arrayOnums.shape
flatNums = arrayOnums.flatten()
for num,x in enumerate(flatNums):
if x >= 0: pass
else:
flatNums[num] = 0
arrayOnums = flatNums.reshape(dims)
return arrayOnums
negToZero(listOnums)