python takes list and returns only if negative val

2019-01-20 20:45发布

Basically I have a big list:

# where (n) is over a couple hundred thousand or is 1 million
def big_list(n):
    return [ randrange(-n//3,n//3) for i in range(n) ]

And using a set I must return a new list if and only if its negative value also exists.

Ex. if list = [-3,-2,-1,2,1,4] it should return new_list = [2,1]

I must do this using set, and I''m really lost.

2条回答
Viruses.
2楼-- · 2019-01-20 21:14

If you create a set from a list created with big_list(), you can use it to create a desired result list by iterating through all the elements of the set and selecting all those whose values are > 0 and whose negative value is also in the set.

You can use a list display expression, commonly call a "list comprehension", to create the resultant list with one long-ish line of code inside [] brackets, like the big_list() function does.

Hope this helps.

查看更多
Lonely孤独者°
3楼-- · 2019-01-20 21:27

Store all negative numbers in a set and then get the intersection with the initial list:

negatives = set(-x for x in data if x < 0)
numbers_with_negatives = negatives.intersection(data)

Demo:

>>> data
[-3, -2, -1, 2, 1, 4]
>>> negatives = set(-x for x in data if x < 0)
>>> negatives
set([1, 2, 3])
>>> negatives.intersection(data)
set([1, 2])
查看更多
登录 后发表回答