2014-10-16 4 views
-3
def pos_and_neg(a): 
    seen = set() 
    seen_add = seen.add 
    return [ x for x in a if not (x in seen or seen_add(x))] 

print pos_and_neg([1,2,3,-1,-3]) 

Это должно вернутьКак удалить отдельные номера из строки при сохранении порядка

[1,3,-1,-3] 
+1

Вы имеете в виду, что хотите сохранить значение только в том случае, если оно присутствует как в положительном, так и в отрицательном (например, 1 и -1, 3 и -3)? Что делать, если есть повторы? – CoryKramer

+0

Да, точно, сделайте его модульным для любого печатного текста на нем –

+0

Здесь нет никаких строк ... – geoffspear

ответ

0
def pos_and_neg(a): 
    return [ x for x in a if (x*(-1)) in a] 
print pos_and_neg([1, 4, 6, -1, -4, -6, 5, 7, -7]) 

выход: - [1, 4, 6, -1, -4, -6, 7, -7]

+0

звучит хорошо, но будет ли это работать, скажем, print pos_and_neg ([1, 4,5,6, -1, -4, -6]) im, просто пытаясь сделать его модульным, чтобы он мог работать над любой печатью, которую вы бросаете на него. –

+0

@NickBergeron проверяет обновленный код. –

+0

@NickBergeron для '[1,4,5,6, -1, -4, -6]' он имеет выход: - '[1, 4, 6, -1, -4, -6]' –

0

Вы могли бы сделать что-то вроде этого

def pos_and_neg(l): 
    unique = set(l) # use a set for faster lookups 
    return [i for i in l if (i*-1) in unique] 

>>> pos_and_neg([1,4,5,6,-1,2,-4,-6]) 
[1, 4, 6, -1, -4, -6] 

Хотя это не будет t обрабатывать дубликаты, поэтому, если у вас есть [1,1,-1], все значения будут сохранены, вместо удаления одного из 1 s.

Смежные вопросы