In caso di dubbio, non utilizzare list comprehension.
Prova import this
nella shell Python e leggere la seconda linea:
Explicit is better than implicit
Questo tipo di compounding di list comprehension sarà decifrare un sacco di programmatori Python così almeno aggiungere un commento a spiegare che si sta rimuovendo le stringhe e appiattendo la lista rimanente.
Utilizzare le list comprehensions dove sono chiare e facili da capire e, soprattutto, le usiamo quando sono idiomatiche, cioè comunemente usate perché sono il modo più efficiente o elegante per esprimere qualcosa. Ad esempio, this Python Idioms article fornisce il seguente esempio:
result = [3*d.Count for d in data if d.Count > 4]
È chiaro, semplice e lineare. La comprensione delle liste di nidificazione non è male se si presta attenzione alla formattazione e magari si aggiunge un commento perché le parentesi aiutano il lettore a decomporre l'espressione. Ma la soluzione che è stata accettata per questo problema è troppo complessa e confusa secondo me. Oltrepassa i limiti e rende il codice illeggibile per troppe persone. È meglio srotolare almeno un iterazione in un ciclo for.
fonte
2009-11-09 10:26:17
Non capisco la necessità della x per x nel tuo caso. Perché non usi tutto = [t [1] per t nei test]? – luc
'[t [1] per t nei test]' restituirà una lista di tuple. '[x for t in tests per x in t [1]]' è una lista semplice (concatenazione di queste tuple). –