Переупорядочение списка в заданном порядке

#python #list #for-loop #indexing

Вопрос:

Я хочу переупорядочить свой список в заданном порядке, например, у меня есть список [«a», «b», «c», «d», «e», «f», «g»]. У этого есть индекс [0,1,2,3,4,5,6] и, допустим, новый упорядоченный список будет иметь порядок [3,5,6,1,2,4,0], что приведет к [«d»,»f»,»g», «b», «c», «e», «a»].

Как бы вы привели к такому коду?

Я подумал об использовании цикла for, выполнив

 for i in range(Len(list))  

и после этого я подумал, что можно использовать добавление или создать новый список? может быть, но я не уверен, правильно ли я подхожу к этому.

Ответ №1:

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

 elems = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] idx = [3,5,6,1,2,4,0]  result = [elems[i] for i in idx] print(result)  

Выход:

 ['d', 'f', 'g', 'b', 'c', 'e', 'a']  

Комментарии:

1. Я надеюсь, что синтаксис понимания списка понятен, вы, конечно, можете сделать это с помощью обычного цикла for

2. Большое вам спасибо за инструкции! Теперь я понимаю, как это работает. Просто еще один вопрос, который вытекает из этого. Как бы вы изменили порядок этого списка обратно на [a,b,c,d,e,f,g]? Я устал переупорядочивать измененный список, используя предоставленный список индексов, но это не всегда работает таким образом. Был бы какой-нибудь способ, которым я все еще мог бы использовать данный список индексов, чтобы изменить порядок списка обратно?

3. ^ @user14004788 Вы могли бы задать еще один последующий вопрос. Но проясните, что такое ваш «переупорядочить список обратно».

Ответ №2:

 import numpy as np  my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']  def my_function(my_list, index):  return np.take(my_list, index)  print(my_function(my_list, [3,5,6,1,2,4,0]))  
 Output: ['d' 'f' 'g' 'b' 'c' 'e' 'a']