python выбирает определенные элементы из списка

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

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

  • Минимальный рабочий пример Launchctl с Python
  • Ошибка NULL-ограничения с ошибкой
  • Множество типов данных Python genfromtext
  • Смысловые функции с FlexMock в Python?
  • Есть ли плагин для vim для автоматического импорта библиотек python?
  • Изменение слов, сохраняющих его значение неизменным
  • Ошибка CSV Python: строка содержит NULL-байт
  • Решение NoSQL для постоянных графов в масштабе
  • 7 Solutions collect form web for “python выбирает определенные элементы из списка”

    Я думаю, что вы ищете 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') 

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

     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]] 
     lst = line.split(',') one, four, ten = lst[1], lst[4], lst[10] 

    Попробуйте 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(',')) 

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

     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] 

    Да:

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

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

    Кроме того, если у вас был массив 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) в виде индексов массива.

    EDIT: Сначала я подумал, что это также будет работать с кортежами, но это немного сложнее. Я предлагаю придерживаться списков или массивов.

    Interesting Posts

    Решение для AssertionError: неверное определение dtype в get_concat_dtype при объединении операции в списке Dataframes

    Захват сообщения «Ошибка сегментации» для разбитого подпроцесса: нет выхода и ошибки после вызова для связи ()

    Почему QWebView.loadFinished вызывается несколько раз на некоторых сайтах, например youtube?

    Mac OS X El Capitan – Scrapy / Python ImportError: невозможно импортировать имя xmlrpc_client

    Существует ли лучший способ определения признаков перекрестного сопоставления для массивов numpy

    sqlite3 в Python

    Получить метки классов из функциональной модели Keras

    matplotlib: рисование линий между точками, игнорирующими отсутствующие данные

    TypeError: исключения должны быть классами старого стиля или производными от BaseException, а не str

    Как вытащить атрибуты CSS из встроенных стилей с помощью BeautifulSoup

    Py2Exe «Следующие модули отсутствуют»

    Как выбрать профиль AWS при использовании boto3 для подключения к CloudFront

    выбор между несколькими столбцами с pandon pandas?

    Как вы можете извлечь идентификатор оборудования с помощью Python?

    Самый быстрый способ преобразования ключей и значений dict из str в Unicode?

    Python - лучший язык программирования в мире.