Invert negative values in a list

后端 未结 5 482
清酒与你
清酒与你 2020-12-11 21:24

I am trying to convert a list that contains negative values, to a list of non-negative values; inverting the negative ones. I have tried abs but it didn\'t work

相关标签:
5条回答
  • 2020-12-11 21:44

    what you want is to use the absolute value (|x| = x if x > 0, |x| = -x if x < 0)

    for index in range(len(x)):
        x[index] =  x[index] if x[index] > 0 else -x[index]
    
    0 讨论(0)
  • 2020-12-11 21:50

    Your attempt didn't work because abs() takes an integer, not a list. To do this, you'll have to either loop through the list:

    x = [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]
    for i in range(len(x)):
         x[i] = abs(x[i])
    

    Or you can use list comprehension, which is shorter:

    x = [abs(i) for i in x]
    

    Or simply use the built-in map function, which is even shorter :)

    x = list(map(abs, x))
    

    Hope this helps!

    0 讨论(0)
  • 2020-12-11 21:55

    Try a list comprehension:

    x2 = [abs(k) for k in x]
    
    0 讨论(0)
  • 2020-12-11 22:08

    The simple pythonic way is the list comprehension above but if you're using Numpy for anything else you could do:

    x2 = numpy.abs(x)
    

    with no need to convert or do any looping.

    0 讨论(0)
  • 2020-12-11 22:10

    This is a wrong answer to your question, but this is what I came here looking for. This is how to invert all the numbers in your list using operator.neg; i.e. also positives to negatives.

    import operator
    x = [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]
    x = list(map(operator.neg, x))
    

    It returns:

    [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    

    Or you can do a list comprehension of course:

    x = [-xi for xi in x]
    
    0 讨论(0)
提交回复
热议问题