Python выбрать конкретные элементы из списка - PullRequest
27 голосов
/ 25 января 2010

Есть ли "питонный" способ получения только определенных значений из списка, подобный этому Perl-коду:

my ($one,$four,$ten) = line.split(/,/)[1,4,10]

Ответы [ 7 ]

23 голосов
/ 15 февраля 2012

Использование списка понимания

line = '0,1,2,3,4,5,6,7,8,9,10'
lst = line.split(',')
one, four, ten = [lst[i] for i in [1,4,10]]
21 голосов
/ 25 января 2010

Я думаю, что вы ищете operator.itemgetter:

import operator
line=','.join(map(str,range(11)))
print(line)
# 0,1,2,3,4,5,6,7,8,9,10
alist=line.split(',')
print(alist)
# ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
one,four,ten=operator.itemgetter(1,4,10)(alist)
print(one,four,ten)
# ('1', '4', '10')
8 голосов
/ 25 января 2010
lst = line.split(',')
one, four, ten = lst[1], lst[4], lst[10]
5 голосов
/ 25 января 2010

Попробуйте operator.itemgetter (доступно в python 2.4 или более поздней версии):

Возвращает вызываемый объект, который выбирает элемент из своего операнда, используя метод ____ getitem ____ (). Если указано несколько элементов, возвращает набор значений поиска.

>>> from operator import itemgetter
>>> line = ','.join(map(str, range(11)))
>>> line
'0,1,2,3,4,5,6,7,8,9,10'
>>> a, b, c = itemgetter(1, 4, 10)(line.split(','))
>>> a, b, c
('1', '4', '10')

Сжатый:

>>> # my ($one,$four,$ten) = line.split(/,/)[1,4,10]
>>> from operator import itemgetter
>>> (one, four, ten) = itemgetter(1, 4, 10)(line.split(','))
2 голосов
/ 23 января 2013

Как насчет этого:

index = [1, 0, 0, 1, 0]
x = [1, 2, 3, 4, 5]
[i for j, i in enumerate(x) if index[j] == 1]
#[1, 4]
1 голос
/ 25 января 2010

Да

data = line.split(',')
one, four, ten = data[1], data[4], data[10]

Вы также можете использовать itemgetter, но я предпочитаю приведенный выше код, он понятнее и яснее == хороший код.

0 голосов
/ 22 марта 2014

Кроме того, если у вас есть массив Numpy вместо списка, вы можете сделать что-то вроде:

from numpy import array

# Assuming line = "0,1,2,3,4,5,6,7,8,9,10"
line_array = array(line.split(","))

one, four, ten = line_array[[1,4,10]]

Хитрость в том, что вы можете передать список (или массив Numpy) в виде индексов массива.

РЕДАКТИРОВАТЬ: Сначала я подумал, что это также будет работать с кортежами, но это немного сложнее. Я предлагаю придерживаться списков или массивов.

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