Можно ли расширить два списка одновременно? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть два списка (list_1, list_2) и функция, которая возвращает два списка (list_1_f, list_2_f), и я хотел бы добавить элементы list_1_f в list_1 и элементы list_2_f в list_2:

def lists():
    list_1_f = [10,10,10]
    list_2_f = [20,20,20]    
    return list_1_f,list_2_f

list_1, list_2 = [1,1,1], [2,2,2]

Дело в том, что у меня всегда есть 2 оригинальных списка, и расширение будет сделано только для двух дополнительных списков.Так что в конце у меня было бы два списка с исходными элементами плюс те, которые были получены из функции, и вывод был бы:

list_1 = [1,1,1,10,10,10]
list_2 = [2,2,2,20,20,20]

Я пробовал следующие строки, используя функцию расширения, но ни один не работает:

list_1.extend([]), list_2.extend([]) = lists()
list_1.extend(), list_2.extend() = lists()
list_1.extend, list_2.extend = lists()

Я всегда мог сделать следующее:

list_1a, list_2a = lists()
list_1.extend(list_1a)
list_2.extend(list_2a)

Но мне было интересно, возможно ли вообще сделать расширение без необходимости создания двух промежуточных списков.

1 Ответ

1 голос
/ 07 июня 2019

Это не возможно напрямую, потому что то, что должно быть слева от присваивания, не может быть вызовом функции.Он может быть построен только из простых переменных, элементов данных, индексов и запятых, скобок или квадратных скобок.

Лучшее, что можно сделать, - это использовать понимание или карту справа:

list_1, list_2 = map(lambda x: sum(x, []), zip((list_1, list_2), lists()))

(спасибо @meowgoesthedog за это)

Лучше ли, чтобы чистый код, использующий 3 строки, оставался за читателем.ИМХО, единственный реальный вариант использования был бы внутри лямбды, которая поддерживает только уникальное выражение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...