python принимает список и возвращает только если отрицательное значение также существует, используя set

В основном у меня есть большой список:

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

И используя set я должен вернуть новый список, если и только если его отрицательное значение также существует.

Ex. если list = [-3,-2,-1,2,1,4] он должен вернуть new_list = [2,1]

Я должен сделать это с помощью set , и я действительно потерялся.

Храните все отрицательные числа в наборе, а затем получите пересечение с исходным списком:

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

Демо-версия:

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

Если вы создаете set из списка, созданного с помощью big_list() , вы можете использовать его для создания нужного списка результатов, итерации по всем элементам набора и выбора всех тех, значения которых> 0, а отрицательное значение которых также находится в задавать.

Вы можете использовать выражение отображения списка , обычно вызывать «понимание списка», чтобы создать результирующий список с одной длинной строкой кода внутри [] скобок, например, big_list() .

Надеюсь это поможет.