Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
235 views
in Technique[技术] by (71.8m points)

python takes list and returns only if negative value also exists using set

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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])

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...