Как получить доступ к определенным местам целочисленного списка в Python? - PullRequest
4 голосов
/ 08 сентября 2011

У меня есть целочисленный список, который следует использовать в качестве индексов другого списка для получения значения.Допустим, у нас есть следующий массив

    a = [1,2,3,4,5,6,7,8,9]

Мы можем получить конкретные элементы, используя следующий код

    import operator
    operator.itemgetter(1,2,3)(a)

. Он вернет 2-й, 3-й и 4-й элемент.

Допустим, у меня есть другой список

    b=[1,2,3]

Но если я попытаюсь запустить следующий код, он получит ошибку

    operator.itemgetter(b)(a)

Мне интересно, может ли кто-нибудь помочь мне, пожалуйста.Я думаю, что проблема в том, что мне нужно конвертировать b в разделенные запятыми индексы, но я не совсем уверен.

Большое спасибо

Ответы [ 4 ]

8 голосов
/ 08 сентября 2011

Использование *:

operator.itemgetter(*b)(a)

Знак * в вызове функции означает, распаковать это значение и использовать его элементы в качестве аргументов функции.

3 голосов
/ 08 сентября 2011

Поскольку вы пометили свой вопрос тегом numpy, вы также можете подумать о создании массива, чтобы он работал:

from numpy import array
a = array([1,2,3,4,5,6,7,8,9])
b = [1,2,3]
a[b]
0 голосов
/ 08 сентября 2011

Вы также можете попробовать:

map(a.__getitem__, b)

Код возвращает список в Python 2 или итератор в Python 3. Если вам нужно преобразовать его в кортеж, просто поместите его в tuple().

0 голосов
/ 08 сентября 2011

Первый аргумент itemgetter должен быть кортежем.Вы можете сделать это с помощью:

apply(operator.itemgetter, tuple(b))(a)

Возможно, есть более чистый / более нелепый способ сделать это, но это работает для вашего примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...