Działa to również:
zip(*elements)[1]
(Publikuję to głównie, aby udowodnić sobie, że żałowałem zip
...)
Zobacz to w akcji:
>>> help(zip)
Pomoc dotycząca wbudowanej funkcji zip we wbudowanym module :
zamek błyskawiczny(...)
zip (seq1 [, seq2 [...]]) -> [(seq1 [0], seq2 [0] ...), (...)]
Zwraca listę krotek, gdzie każda krotka zawiera i-ty element z każdej sekwencji argumentów. Długość zwracanej listy jest obcinana do długości najkrótszej sekwencji argumentów.
>>> 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)
>>>
Niezła rzecz, której się dzisiaj nauczyłem: użyj *list
argumentów, aby utworzyć listę parametrów dla funkcji ...
Uwaga : w Python3 zip
zwraca iterator, więc zamiast tego użyj, list(zip(*elements))
aby zwrócić listę krotek.
**dict
do tworzenia argumentów słów kluczowych:def test(foo=3, bar=3): return foo*bar
następnied = {'bar': 9, 'foo'=12}; print test(**d)
Jest inny sposób. Możesz to również zrobić za pomocą map i itemgetter :
To nadal wykonuje wewnętrzną pętlę i jest nieco wolniejsze niż rozumienie listy:
Wyniki:
Jeśli potrzebujesz iterować po liście, użycie a
for
jest w porządku.źródło
Znalazłem to, ponieważ szukałem, w jaki sposób najszybciej wyciągnę drugi element listy 2 krotek. Nie to, czego chciałem, ale przeprowadziłem ten sam test, jak pokazano, przy trzeciej metodzie oraz przetestowałem metodę zip
Więc ponad dwa razy szybciej, jeśli masz 2 pary krotek, aby po prostu przekonwertować na dyktę i pobrać wartości.
źródło
dict(elements).values()
że spowoduje to jednoelementowe dyktowanie, w przeciwieństwie do kompresji listy lub mapy. To jest dokładnie to, czego chciałem (interesowały mnie unikalne poprawki) (+1 i wielkie dzięki za wysłanie), ale inni mogą się zastanawiać, dlaczego dykt jest szybszy - nie alokuje pamięci, a jedynie sprawdza istniejący element.Czasy dla Pythona 3.6 do wyodrębniania drugiego elementu z listy 2 krotek.
Dodano również
numpy
metodę tablicową, która jest prostsza do odczytania (ale prawdopodobnie prostsza niż rozumienie listy).i terminy:
Zauważ, że
map()
izip()
nie zwracaj już listy, stąd jawna konwersja.źródło
źródło
Korzystanie
islice
ichain.from_iterable
:Może to być przydatne, gdy potrzebujesz więcej niż jednego elementu:
źródło