替换数组中的否定,Python

时间:2015-08-20 00:10:47

标签: python arrays

如何编写一个用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)

6 个答案:

答案 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)