你是如何打破一个很长的列表理解?
[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
我也曾在某个地方看到那些不喜欢使用'\'打破线条的人, 但永远不明白为什么。这背后的原因是什么?
答案 0 :(得分:130)
[x
for
x
in
(1,2,3)
]
工作正常,所以你可以随心所欲地做。我个人更喜欢
[something_that_is_pretty_long
for something_that_is_pretty_long
in somethings_that_are_pretty_long]
\
之所以不受重视的原因是它出现在一行的 end 中,它不会突出或需要额外的填充,在线长变化时修复:
x = very_long_term \
+ even_longer_term_than_the_previous \
+ a_third_term
在这种情况下,请使用parens:
x = (very_long_term
+ even_longer_term_than_the_previous
+ a_third_term)
答案 1 :(得分:22)
我不反对:
variable = [something_that_is_pretty_long
for something_that_is_pretty_long
in somethings_that_are_pretty_long]
在这种情况下,您不需要\
。一般来说,我认为人们会避免使用\
,因为它有点丑陋,但如果它不是最后的东西也会产生问题(确保没有空格跟随它)。我认为使用它比使用它要好得多,以便保持线路长度。
由于在上述情况下不需要\
,或者对于带括号的表达式,我实际上发现我甚至不需要使用它。
答案 2 :(得分:19)
如果您正在处理多个数据结构的列表,也可以使用多个缩进。
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语句删除到自己的行也很有用。