2016-01-22 3 views
0

Я ищу простой способ отсортировать 2 списка сразу. Мне нужно отсортировать первый список, содержащий строки по алфавиту, так же, как сортировать второй список, содержащий целые числа. Данные списков связаны (первый [1] связан со вторым [1] ...). Поэтому мне нужно сохранить тот же индекс для пары с одним индексом из обоих списков. Например:Сортировка 2 списков

first = ["B","C","D","A"] 
second = [2,3,4,1] 

Я хотел бы, чтобы уладить это так:

first = ["A","B","C","D"] 
second = [1,2,3,4] 

Я не уверен, если это вообще возможно сделать это простым способом.

+0

Верхний ответ выглядит хорошо, но это звучит, как вы должны использовать кортежи или даже лучше Панды Dataframe. – Narek

ответ

2

Вы можете zip() их, сортировать, а затем разархивировать (хотя я не в полной мере понять случай использования):

>>> first = ["B","C","D","A"] 
>>> second = [2,3,4,1] 
>>> 
>>> zip(first, second) 
[('B', 2), ('C', 3), ('D', 4), ('A', 1)] 
>>> first_new, second_new = zip(*sorted(zip(first, second))) 
>>> first_new 
('A', 'B', 'C', 'D') 
>>> second_new 
(1, 2, 3, 4) 
0

пытаются с помощью кортежа визит wiki.python.org экс:

>>> student_tuples = [ 
     ('john', 'A', 15), 
     ('jane', 'B', 12), 
     ('dave', 'B', 10), 
] 
>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age 

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 
0

или вы могли бы использовать dicts:

>>> d = {"B":2,"C":3,"D":4,"A":1} 
>>> sorted(d) 
['A', 'B', 'C', 'D'] 
>>> d["A"] 
1 
>>> d["C"] 
3 
>>> for i in sorted(d): 
    print(d[i]) 

1 
2 
3 
4 
Смежные вопросы