Понимание списка питона с многократными переменными

Я пытаюсь получить список с определенной продукцией от индекса в другом списке, например:

L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [entry[0, 3, 4] for entry in L] 
#----> I know this specific code is wrong

Я любил бы его, если вышеупомянутый код мог бы произвести:

[(0, 3, 4), (6, 9, 10), (...etc)]

Я хочу, чтобы отдельные подындексы от каждого индекса в главном списке были сгруппированы как показано, если это вообще возможно, и задается вопросом, что кодирует, я мог использовать, чтобы правильно осуществить это, спасибо.

Править: Кроме того, Как мог я форматировать его, чтобы показать как ряды чисто, я произвожу их к текстовому файлу, используя .writelines и отдельной линии продукции, еще раз спасибо!

3
That' s интересный, жаль я couldn' t находят ответ на оригинальный вопрос в другом месте, и редактировать просто просит дополнительный бит помощи, that' s все.
добавлено автор ImmortalxR, источник
Ваш редактировать делает этот другой вопрос, у которого уже есть много ответов на ТАК.
добавлено автор Jon Clements, источник

7 ответы

Использовать operator.itemgetter ():

from operator import itemgetter

multiple_index = map(itemgetter(0, 3, 4), L)

или в понимании списка:

multiple_index = [itemgetter(0, 3, 4)(i) for i in L]
8
добавлено
Это работает замечательно, как быстрое в стороне, если вы могли бы ответить на это, как мог, я заставляю multiple_index показывать продукцию в отдельных рядах, я отредактировал оригинальную почту с новым форматом:)
добавлено автор ImmortalxR, источник
Это дает мне ошибку недопустимого синтаксиса, когда я применяю вышеупомянутый код? Какая-либо идея, почему?
добавлено автор ImmortalxR, источник
Спасибо! у меня было чувство, что у нас, возможно, была опечатка там ха-ха
добавлено автор ImmortalxR, источник
Можно использовать str.join() , чтобы присоединиться к спискам в последовательности: ' \n' .join ([' ' соединение (i), поскольку я в multiple_index]) для одной последовательности, присоединяющейся к внешним спискам новыми строками, внутренним спискам запятой.
добавлено автор Martijn Pieters, источник
@ImmortalxR: Поскольку я случайно напечатал запятую, куда точка идет. У вас также есть исходные данные целого числа, таким образом, you' d должен нанести на карту, чтобы str сначала: ' \n' .join ([' ' .join (карта (str, i)), поскольку я в multiple_index])
добавлено автор Martijn Pieters, источник

Вот один выбор:

L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10, 11), (11, 12, 13, 14, 15, 16)]
multiple_index = [(entry[0], entry[3], entry[4]) for entry in L] 

Или использование operator.itemgetter ():

from operator import itemgetter
indices = itemgetter(0, 3, 4)
multiple_index = [indices(entry) for entry in L] 
3
добавлено
Да - operator.itemgetter что I' d идут для...
добавлено автор Jon Clements, источник
from operator import itemgetter
get = itemgetter(0, 3, 4)
L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [get(entry) for entry in L]

для более функционального стиля:

multiple_index = map(itemgetter(0, 3, 4), L)

Конечно, если вы используете numpy, вы могли бы сделать что-то как следующее:

import numpy as np
L = np.array([(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10, 11), (11, 12, 13, 14, 15, 16)])
multiple_index = L[:,(0, 3, 4)]

получающийся в:

array([[ 0,  3,  4],
       [ 6,  9, 10],
       [11, 14, 15]])

Personally, I like the numpy version the best, but that requires you to have numpy installed. Here's some more on numpy indexing if you're interested: http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

У Numpy также есть некоторые опрятные короткие пути/уловки для необычной части, и здание диапазона, используя np.s _ , np.r _ и np.c _ .

2
добавлено

Интересуются Вы этим?

L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [(entry[0], entry[3], entry[4]) for entry in L] 
#----> I know this specific code is wrong
2
добавлено

Только для некоторого разнообразия, вот путь с itertools.compress,

>>> from itertools import compress, count
>>> indices = {0,3,4}
>>> items_at = lambda indices: (1 if n in indices else 0 for n in count())
>>> [tuple(compress(e, items_at(indices))) for e in L]
[(0, 3, 4), (6, 9, 10)]
2
добавлено

Вот то, как я сделал бы это:

    L=[tuple(range(0,6*1)),tuple(range(6*1,6*2)),tuple(range(6*2,6*3))]
    print [tuple(map(lambda i: entry[i],[0,3,4])) for entry in L]
0
добавлено

кортеж списка и поиски словаря осуществляются, используя их getitem методы

myarray=[0,1,2]
print myarray[1]
#result:1
#equivalent to
print myarray.__getitem__(1)

можно нанести на карту индексы, вы хотите через getitem каждого списка функцию. Это возвращает список, содержащий пункты в тех индексах для каждого списка. Изменение вашего примера кода:

L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [map(entry.__getitem__,[0, 3, 4]) for entry in L]

это производит желаемую продукцию.

для больше на волшебных методах питона посмотрите это:

0
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

CSS — русскоговорящее сообщество
CSS — русскоговорящее сообщество
1 502 участник(ов)

Сообщество любителей CSS Возникли проблемы с CSS? – пиши сюда, обсудим и предложим самое лучшее решение Работа: @css_ru_jobs Правила: https://teletype.in/@css_ru/r1EWtQ2w7 Приходите в наши чаты @javascript_ru и @frontend_ru Флуд: @css_flood

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

css_jobs
css_jobs
26 участник(ов)

Чат для вопросов по css и html: @css_ru Флуд: @css_flood Канал с вакансиями и резюме: @css_jobs_feed

css_флуд
css_флуд
10 участник(ов)