W razie wątpliwości, nie używać wyrażeń listowych.
Spróbuj import this
w powłoce Python i zapoznania się z drugą linię:
Explicit is better than implicit
Ten typ mieszania z listowych będzie puzzle dużo programistów Pythona, więc przynajmniej dodać komentarz wyjaśnić, że usuwasz ciągi i spłaszczając pozostałą listę.
wolno używać wyrażeń listowych, jeżeli są one jasne i łatwe do zrozumienia, a przede wszystkim, czy ich używać, gdy są idiomatyczne, czyli powszechnie stosowane, ponieważ są one najbardziej efektywne i elegancki sposób, aby wyrazić coś. Na przykład, this Python Idioms article podaje następujący przykład:
result = [3*d.Count for d in data if d.Count > 4]
To jest jasne, proste i jednoznaczne. Zagnieżdżanie listy zagnieżdżonej nie jest złe, jeśli zwracasz uwagę na formatowanie, a może dodajesz komentarz, ponieważ nawiasy klamrowe pomagają czytelnikowi rozłożyć wyrażenie. Ale rozwiązanie, które zostało zaakceptowane dla tego problemu, jest moim zdaniem zbyt skomplikowane i mylące. Przekracza granice i sprawia, że kod jest nieczytelny dla zbyt wielu osób. Lepiej jest rozwinąć przynajmniej jedną iterację w pętlę for.
Nie rozumiem potrzeby x na x w twoim przypadku. Dlaczego po prostu nie użyć all = [t [1] dla t w testach]? – luc
'[t [1] dla t w testach]' zwróci listę krotek. '[x dla t w testach dla x in t [1]]' jest płaską listą (konkatenacją tych krotek). –