2016-03-06 4 views
2

У меня есть 2 списка:Python - список курорт на основе другого списка

a=[45, 41, 42, 43, 44] 
b=[41, 42, 43, -44, -45] 

я хочу, чтобы отсортировать b на основе a без отрицательного знака, поэтому после курорта она должна быть:

a=[45, 41, 42, 43, 44] 
b=[-45, 41, 42, 43, -44] 

я попытался сравнить элементы, но я сталкиваюсь с проблемой в отрицательном знаке

благодаря

+0

использовать 'абс()' игнорировать отрицательный знак? –

+0

как это сделать? ? –

+0

Например: 'abs (-45)' is 45 –

ответ

8
>>> sorted(b, key=lambda x: a.index(abs(x))) 
[-45, 41, 42, 43, -44] 

Или, если вы хотите отсортировать b на своем месте

b.sort(key=lambda x: a.index(abs(x))) 
+0

awesome, что я искал Спасибо :) –

1

Вы можете использовать abs для абсолютного значения.

>>> sorted(map(abs,b),reverse=True) 
    [45, 44, 43, 42, 41] 
+2

Это не то, что он хочет. –

+0

это не то, что я хочу, дорогой –

+0

@MostafaMohamed в вашем комментарии вы спросили, как сделать 'abs()', так что это немного вводит в заблуждение. Я просто показал вам, как делать 'abs()' dear –

2

Ответ выше элегантный и лаконичный.

Однако, если вы работаете с более крупными списками, вы можете использовать словарь позиций для предотвращения индексирования вызовов.

Сложность будет оставаться в точке О (п § п) против O (N^2 журнала п)

a=[45, 41, 42, 43, 44] 
b=[41, 42, 43, -44, -45] 


# populate dictionary to reduce number of array scans 
keys = {} 
for x in xrange(len(a)): 
    keys[a[x]] = x 

# key is position in a, or -1 
def key(x): 
    x = abs(x) 
    if x in keys: 
    return keys[x] 
    return -1 

b.sort(key = key) 

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