python中列表推导或生成器表达式的行连续


Answers:


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

效果很好,因此您几乎可以随心所欲。我个人更喜欢

 [something_that_is_pretty_long
  for something_that_is_pretty_long
  in somethings_that_are_pretty_long]

\不能被很好理解的原因是它出现在一行的末尾,要么不突出,要么需要额外的填充,当行长改变时必须固定它:

x = very_long_term                     \
  + even_longer_term_than_the_previous \
  + a_third_term

在这种情况下,请使用括号:

x = (very_long_term
     + even_longer_term_than_the_previous
     + a_third_term)

47
具体来说,换行符内忽略任何支架- ()[]{}

23

我不反对:

variable = [something_that_is_pretty_long
            for something_that_is_pretty_long
            in somethings_that_are_pretty_long]

\在这种情况下,您不需要。总的来说,我认为人们避免\因为它有点丑陋,但是如果不是最后一件事,它也会给您带来麻烦(请确保没有空格后跟)。我认为使用它比不使用它要好得多,这样可以减少行长。

由于\在上述情况下或对于带括号的表达式不是必需的,所以我实际上很少需要使用它。


20

在处理多个数据结构的列表时,也可以使用多个缩进。

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
    ]
]

请注意,它还如何使用if语句过滤到另一个列表。将if语句放到自己的行中也是有用的。


1
我特别喜欢这个答案,因为它显示了换行的几个常规方面,包括for循环的嵌套列表理解。
gustafbstrom
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.