Это тоже работает:
zip(*elements)[1]
(В основном я публикую это, чтобы доказать себе, что я проглотил zip
...)
Посмотрите это в действии:
>>> help(zip)
Справка по встроенной функции zip во встроенном модуле :
zip (...)
zip (seq1 [, seq2 [...]]) -> [(seq1 [0], seq2 [0] ...), (...)]
Вернуть список кортежей, где каждый кортеж содержит i-й элемент из каждой из последовательностей аргументов. Возвращенный список усекается по длине до длины самой короткой последовательности аргументов.
>>> elements = [(1,1,1),(2,3,7),(3,5,10)]
>>> zip(*elements)
[(1, 2, 3), (1, 3, 5), (1, 7, 10)]
>>> zip(*elements)[1]
(1, 3, 5)
>>>
Изящная вещь, которую я узнал сегодня: использовать *list
в аргументах для создания списка параметров функции ...
Примечание . В Python3 zip
возвращает итератор, поэтому вместо этого используйте list(zip(*elements))
для возврата списка кортежей.
**dict
для создания аргументов ключевого слова:def test(foo=3, bar=3): return foo*bar
затемd = {'bar': 9, 'foo'=12}; print test(**d)
Есть другой способ. Вы также можете сделать это с помощью map и itemgetter :
Это по-прежнему выполняет цикл внутри, и это немного медленнее, чем понимание списка:
Полученные результаты:
Если вам нужно перебрать список, можно использовать a
for
.источник
Нашел это, когда искал, какой способ быстрее всего вытащить второй элемент списка из двух кортежей. Не то, что я хотел, но провел тот же тест, что и третий метод, плюс протестировал метод zip
Таким образом, более чем в два раза быстрее, если у вас есть пара кортежей из 2, чтобы просто преобразовать в dict и принять значения.
источник
dict(elements).values()
это приведет к одноэлементному dict, а не к составлению списка или сопоставлению. Это именно то, что я хотел (меня интересовали уникальные элементы) (+1 и большое спасибо за публикацию), но другие могут задаться вопросом, почему dict работает быстрее - он не выделяет память, а только проверяет существующий элемент.Сроки для Python 3.6 для извлечения второго элемента из списка из двух кортежей.
Кроме того, добавлен
numpy
метод массива, который проще читать (но, возможно, проще, чем понимание списка).и время:
Обратите внимание, что
map()
иzip()
больше не возвращают список, отсюда явное преобразование.источник
источник
Использование
islice
иchain.from_iterable
:Это может быть полезно, когда вам нужно более одного элемента:
источник