Isso também funciona:
zip(*elements)[1]
(Estou postando isso principalmente, para provar a mim mesmo que groquei zip
...)
Veja em ação:
>>> help(zip)
Ajuda na função integrada zip no módulo integrado :
fecho eclair(...)
zip (seq1 [, seq2 [...]]) -> [(seq1 [0], seq2 [0] ...), (...)]
Retorne uma lista de tuplas, onde cada tupla contém o i-ésimo elemento de cada uma das sequências de argumento. A lista retornada é truncada em comprimento para o comprimento da menor seqüência de argumentos.
>>> 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)
>>>
Uma coisa legal que aprendi hoje: use *list
em argumentos para criar uma lista de parâmetros para uma função ...
Nota : Em Python3, zip
retorna um iterador, então use list(zip(*elements))
para retornar uma lista de tuplas.
**dict
para criar argumentos de palavra-chave:def test(foo=3, bar=3): return foo*bar
thend = {'bar': 9, 'foo'=12}; print test(**d)
Existe outra maneira. Você também pode fazer isso com map e itemgetter :
Isso ainda executa um loop internamente e é um pouco mais lento do que a compreensão da lista:
Resultados:
Se você precisar iterar em uma lista, não há problema em usar um
for
.fonte
Encontrei isso enquanto procurava a maneira mais rápida de extrair o segundo elemento de uma lista de 2 tuplas. Não é o que eu queria, mas executei o mesmo teste mostrado com um terceiro método mais teste o método zip
Portanto, duas vezes mais rápido se você tiver um par de 2 tuplas apenas para converter para um dicionário e obter os valores.
fonte
dict(elements).values()
que resultará em dict de um elemento em oposição a list comprahension ou map. Isso é exatamente o que eu queria (eu estava interessado em toques únicos) (+1 e muito obrigado por postar), mas outros podem se perguntar por que o dict é mais rápido - não é alocar memória, mas apenas verificar o elemento existente.Tempo para Python 3.6 para extrair o segundo elemento de uma lista de 2 tuplas.
Além disso, adicionou o
numpy
método de array, que é mais simples de ler (mas sem dúvida mais simples do que a compreensão de lista).e os horários:
Observe que
map()
ezip()
não retorna mais uma lista, daí a conversão explícita.fonte
fonte
Usando
islice
echain.from_iterable
:Isso pode ser útil quando você precisa de mais de um elemento:
fonte