Я думаю, что естественный способ сделать это в Go - это просто рассматривать вещи в каждом конкретном случае. Случаи, которые делают списки в Python действительно привлекательными, - это когда вы пытаетесь сделать что-то очень простое, например, заполнение массива возрастающими числами. Если это такая простая концепция, мы можем написать ее просто. Вы можете здесь не согласиться, но я бы сказал, что выделение списка возрастающих чисел (или даже чисел) на самом деле не является типичной проблемой и, похоже, не имеет особой цели.
Ловушка с пониманием списка состоит в том, чтостановится заманчивым использовать их для более сложных сценариев. Возьмите этот пример из Вундеркинды для гиков
# 2-D List of planets
planets = [['Mercury', 'Venus', 'Earth'], ['Mars', 'Jupiter', 'Saturn'], ['Uranus', 'Neptune', 'Pluto']]
flatten_planets = []
for sublist in planets:
for planet in sublist:
if len(planet) < 6:
flatten_planets.append(planet)
print(flatten_planets)
Вывод:
['Venus', 'Earth', 'Mars', 'Pluto']
Это также может быть сделано с использованием вложенных списков, которые имеютпоказано ниже:
# 2-D List of planets
planets = [['Mercury', 'Venus', 'Earth'], ['Mars', 'Jupiter', 'Saturn'], ['Uranus', 'Neptune', 'Pluto']]
# Nested List comprehension with an if condition
flatten_planets = [planet for sublist in planets for planet in sublist if len(planet) < 6]
print(flatten_planets)
Вывод:
['Venus', 'Earth', 'Mars', 'Pluto']
Хотя может быть полезно сократить 4 строки кода до 1, используя «понимание»здесь, возможно, сделали код менее понятным для людей.
Это выражение ...
[planet for sublist in planets for planet in sublist if len(planet) < 6]
Просто кажется отталкивающим, такое же количество "вложенности" (понимание списка вещей делаетуйти), происходит, просто сейчас нет никаких визуальных подсказок, таких как отступы, чтобы помочь нам понять это. Мы должны внимательно прочитать эту строку и воссоздать вложенную логику в нашей голове, чтобы знать, как она работает.
В статье, из которой я взял это, объясняются такие понимания:
Список пониманийявляются одной из самых удивительных особенностей Python. Это умный и лаконичный способ создания списков ...
Это очень питонское отношение, когда когда функция заставляет вас чувствовать себя умно, используя ее в своем коде, это означает, что она хорошадаже если это усложнит задачу других людей (или вас самих на более позднем этапе), пытающихся прочитать и понять ваш код. Такое отношение решительно отвергается в Go.
Одна памятная цитата на эту тему от одного из создателей Go, Роба Пайка (я перефразирую здесь)
Люди спрашивали насдля такого рода функций, и мы говорим «нет». Одна из причин заключается в том, что, если вы добавите эти функции, люди будут их использовать, поэтому они там есть. Но они могут быть дороже, чем простой цикл. Они имеют тенденцию генерировать более дорогие решения проблем, которые имеют гораздо более простые решения