Python Forum
get positive number from a list if there's the same number but negative
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
get positive number from a list if there's the same number but negative
#1
list_one = [-8, 8, 144, 17]

def test(lis):
    return min(lis, key=abs)

print test(list_one)
Output:
-8
i want to print the closest number to 0 from a list,
in this case, -8 and 8 are the two closest number to 0, but i get the first number of the list(-8), and i would like that if there is two numbers which are as close each other to 0 (so like in this case, -8 and 8) I'd like to get the positive number ( so 8 )
how could i do that , thanks

well, resolved doing this,

list_one = [-8, 8, 144, 17]
 
def test(lis):
    m = min(lis, key=abs)
    if m < 0:
        if m and m*-1 in lis:
            return m*-1
        else:
            return m
    else:
        return m

print test(list_one)
new output :
Output:
8
was there a simpler way ?
Reply
#2
Yes

list_one = [-8, 8, 144, 17]
min(filter(lambda x: x >= 0, list_one))
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply
#3
i will look at it , thanks
Reply
#4
With the list = [-8, 144, 17]
I get -8 with first programm
and 17 with second program.
Reply
#5
hi heiner, this is weird, it's not the case for me,
with first program, i get -8
with second program, -8 too
Reply
#6
Take my list = [-8, 144, 17], not the original one.
Reply
#7
this is what i did :

list_one = [-8, 144, 17]
 
def test(lis):
    return min(lis, key=abs)
 
print test(list_one)
Output:
-8
----

list_one = [-8, 8, 144, 17]
  
def test(lis):
    m = min(lis, key=abs)
    if m < 0:
        if m and m*-1 in lis:
            return m*-1
        else:
            return m
    else:
        return m
 
print test(list_one)
Output:
-8
Reply
#8
Sorry, with second program, I meant this:

list_one = [-8, 144, 17]
print(min(filter(lambda x: x >= 0, list_one)))
Reply
#9
oh yes, you're right, it seems to work only for positives numbers, i finally used this way:


list_one = [-8, 8, 144, 17]
def test(lis):
    m = min(lis, key=abs)
    if m and -m in lis:
        return abs(m)
    else:
        return m

print test(list_one)
Output:
8
and with you're list:

list_one = [-8,  144, 17]
def test(lis):
    m = min(lis, key=abs)
    if m and -m in lis:
        return abs(m)
    else:
        return m

print test(list_one)
Output:
-8
Reply
#10
Why
    if m and -m in lis:
and not only:
    if -m in lis:
?

I think "if m" is always true (except 0).
Or did you mean:
if m in list and -m in list:
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
Brick Number stored as text with openpyxl CAD79 2 358 Apr-17-2024, 10:17 AM
Last Post: CAD79
  [SOLVED] Pad strings to always get three-digit number? Winfried 2 336 Jan-27-2024, 05:23 PM
Last Post: Winfried
  cmath.rect accepts a negative modulus JMB 2 326 Jan-17-2024, 08:00 PM
Last Post: JMB
  Prime number detector Mark17 5 798 Nov-27-2023, 12:53 PM
Last Post: deanhystad
  Create X Number of Variables and Assign Data RockBlok 8 925 Nov-14-2023, 08:46 AM
Last Post: perfringo
  find the sum of a series of values that equal a number ancorte 1 493 Oct-30-2023, 05:41 AM
Last Post: Gribouillis
  capturing multiline output for number of parameters jss 3 809 Sep-01-2023, 05:42 PM
Last Post: jss
  Sequential number for rows retrieved and storing the Primary UKey to the line number GYKR 2 573 Aug-22-2023, 10:14 AM
Last Post: GYKR
  doubling a number Skaperen 8 1,213 Jul-25-2023, 10:20 PM
Last Post: Skaperen
Question Extracting Version Number from a String britesc 2 1,087 May-31-2023, 10:20 AM
Last Post: britesc

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020