Jei / kitaip suprasite „Python“ sąrašą?

Kaip galiu Python atlikti šiuos veiksmus?

 row = [unicode(x.strip()) for x in row if x is not None else ''] 

Iš esmės:

  • pakeiskite visas „nones“ tuščias eilutes ir tada
  • atlikti funkciją.
434
23 нояб. AP257 nustatytas lapkričio 23 d 2010-11-23 22:56 „10, 10:56 val. 2010-11-23 22:56
@ 3 atsakymai

Jūs galite tai padaryti visiškai, tai tik su užsakymo problema:

 [ unicode(x.strip()) if x is not None else '' for x in row ] 

Atkreipkite dėmesį, kad tai iš tikrųjų naudoja skirtingą kalbos konstrukciją, sąlyginę išraišką , kuri savaime nėra suprantamos sintaksės dalis , o if po to for…in yra sąrašų supratimo dalis ir naudojama filtruoti elementus iš pirminės iteracijos.

Sąlyginės išraiškos gali būti naudojamos visose situacijose, kai norite pasirinkti tarp dviejų išraiškos vertybių, pagrįstų tam tikromis sąlygomis. Tai daroma taip pat, kaip ir trivietis ?: Operatorius, kuris egzistuoja kitomis kalbomis . Pavyzdžiui:

 value = 123 print(value, 'is', 'even' if value % 2 == 0 else 'odd') 
677
23 нояб. lapkričio 23 d. 2010-11-23 22:59 '10 10:59 val. 2010-11-23 22:59

Vienas iš būdų:

 def change(f): if f is None: return unicode(f.strip()) else: return '' row = [change(x) for x in row] 

Nors turite:

 row = map(change, row) 

Arba galite naudoti įmontuotą lambda.

28
23 нояб. Atsakymą pateikė Adomas Vandenbergas lapkričio 23 d. 2010-11-23 23:00 '10 23:00 val. 2010-11-23 23:00

Čia yra dar vienas pavyzdys:

 >>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!") Ha, ha, ha! 

Jis naudoja faktą, kad if i yra nustatytas kaip False ( 0 ir True visoms kitoms reikšmėms, gautoms pagal range() funkciją. Todėl sąrašas vertinamas taip:

 >>> ["ha" if i else "Ha" for i in range(3)] ['Ha', 'ha', 'ha'] 
23
08 окт. atsakymas, kurį pateikė Bengt Oct 08 2012-10-08 00:37 '12 prie 0:37 2012-10-08 00:37

Peržiūrėkite kitus klausimus apie „ etiketes arba Užduokite klausimą