Продолжение строки для понимания списков или выражений генератора в python
Как вы должны разбить очень длинное понимание списка?
[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
Я также видел, что люди, которые не любят использовать "\" для разрыва линий,
но никогда не понимал, почему. В чем причина этого?
Ответы
Ответ 1
[x
for
x
in
(1,2,3)
]
отлично работает, поэтому вы можете в значительной степени позаботиться о себе. Я бы предпочел
[something_that_is_pretty_long
for something_that_is_pretty_long
in somethings_that_are_pretty_long]
Причина, по которой \
не очень ценится, заключается в том, что она появляется в конце строки, где она либо не выделяется, либо требует дополнительного заполнения, которое должно быть исправлено при изменении длины строки:/p >
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)
Ответ 2
Я не против:
variable = [something_that_is_pretty_long
for something_that_is_pretty_long
in somethings_that_are_pretty_long]
В этом случае вам не нужно \
. В общем, я думаю, что люди избегают \
, потому что это немного уродливо, но также может дать проблемы, если это не последняя вещь на линии (убедитесь, что после нее не пробегает пробел). Я думаю, что гораздо лучше использовать его, чем нет, однако, чтобы сохранить длину вашей линии.
Так как \
не требуется в приведенном выше случае или для выражений в скобках, я на самом деле считаю это довольно редким, что мне даже нужно его использовать.
Ответ 3
Вы также можете использовать несколько отступов в случаях, когда вы имеете дело со списком нескольких структур данных.
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 в своей строке.