Python'da liste anlamaları veya oluşturucu ifadeleri için satır devamı


102

Çok uzun bir liste anlayışını nasıl bölebilirsiniz?

[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]

Ayrıca, satırları ayırmak için '\' kullanmayı sevmeyen, ancak nedenini asla anlamayan insanların da bir yerlerde gördüm. Bunun arkasındaki sebep nedir?


Yanıtlar:


143
[x
 for
 x
 in
 (1,2,3)
]

iyi çalışıyor, böylece istediğiniz gibi yapabilirsiniz. Şahsen tercih ederim

 [something_that_is_pretty_long
  for something_that_is_pretty_long
  in somethings_that_are_pretty_long]

\Çok fazla takdir edilmemesinin nedeni , bir satırın sonunda görünmesi, ya göze çarpmadığı ya da fazladan dolguya ihtiyaç duymasıdır; bu, satır uzunlukları değiştiğinde düzeltilmelidir:

x = very_long_term                     \
  + even_longer_term_than_the_previous \
  + a_third_term

Bu gibi durumlarda parantez kullanın:

x = (very_long_term
     + even_longer_term_than_the_previous
     + a_third_term)

47
Özellikle, satır sonları içine dikkate alınmaz herhangi parantez - (), []ve {}.

23

Ben karşı değilim:

variable = [something_that_is_pretty_long
            for something_that_is_pretty_long
            in somethings_that_are_pretty_long]

\Bu durumda ihtiyacınız yok . Genel olarak insanların kaçındığını düşünüyorum\ biraz çirkin olduğu için , ancak satırdaki son şey değilse de sorun yaratabilir (onu takip eden boşluk olmadığından emin olun). Hat uzunluklarınızı düşük tutmak için kullanmamaktansa kullanmanın çok daha iyi olduğunu düşünüyorum.

Yana \yukarıdaki durumunda gerekli değilse veya parantez ifadeleri, aslında ben bile kullanmak gerektiğini oldukça nadir bulabilirsiniz.


20

Birkaç veri yapısı listesiyle uğraştığınız durumlarda da çoklu girintilerden yararlanabilirsiniz.

new_list = [
    {
        'attribute 1': a_very_long_item.attribute1,
        'attribute 2': a_very_long_item.attribute2,
        'list_attribute': [
            {
                'dict_key_1': attribute_item.attribute2,
                'dict_key_2': attribute_item.attribute2
            }
            for attribute_item
            in a_very_long_item.list_of_items
         ]
    }
    for a_very_long_item
    in a_very_long_list
    if a_very_long_item not in [some_other_long_item
        for some_other_long_item 
        in some_other_long_list
    ]
]

Bir if ifadesi kullanarak başka bir listeye nasıl filtre uygulandığına dikkat edin. İf ifadesini kendi satırına bırakmak da faydalıdır.


1
Döngüler için iç içe liste anlama dahil olmak üzere satır kırmanın birçok geleneksel yönünü gösterdiği için bu yanıtı özellikle seviyorum for.
gustafbstrom
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.