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