2013-11-17 2 views
0

мне нужно определить функцию применить (L, P), где L представляет собой список и P является перестановкой, и она должна возвращать список L о P. Предположим len(L) = len(P)Перестановки в список питона

Что я ве получили до сих пор является

import itertools 
def apply(L, P): 
    for perm in L: 
     return perm 

пример ввода является apply(['ah', 'boo', 'cc', 'du', 'eh'], [1, 4, 3, 2, 0]) Но единственный выход из этого является 'ah'

Любая помощь будет большим.

+0

И вы на самом деле не используя P в любом месте. – Sneftel

+0

'return' немедленно прекратит выполнение функции и вернет значение как единственное возвращаемое значение. Таким образом, вы по существу останавливаете свою петлю. Возможно, вы захотите сделать это генератором и использовать 'yield'. – poke

+0

@poke Я уверен, что он/она хочет вернуть весь список. Но это также заставило меня думать о выходе/генераторах: p. [Здесь] (http://stackoverflow.com/a/231855/645270) хорошо читайте на эту тему, если кому-то это интересно. – keyser

ответ

0

Вот моя версия:

def apply(L, P): 
    newL = [None]*len(L) 
    for i,index in enumerate(P): 
     newL[i] = L[index] 
    return newL 

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

Весь список создается перед возвратом. return означает, что функция должна выйти и вернуть указанное значение. В вашем случае это 'ah', так как это первый элемент в списке, который вы просматриваете.

Если вы хотите изучить python, ознакомьтесь с очень понятным списком python svk.

1

Это звучит как задача наиболее легко достигается с помощью списка понимания:

>>> def apply(L, P): 
... return [ L[i] for i in P ] 
... 
>>> apply(['ah', 'boo', 'cc', 'du', 'eh'], [1, 4, 3, 2, 0]) 
['boo', 'eh', 'du', 'cc', 'ah'] 
Смежные вопросы