2016-01-28 3 views
1

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

def func(): 
    return [-1,2],[4,1] 
f=[1,2] 
g=[3,4] 
f,g=func() #How make it append 
print f,g 

#Expected Output: 
[1,2,-1,2] [3,4,4,1] 

Для одного списка, я могу сделать f.extend(func()) но как насчет нескольких списков. Создание временных переменных не является предпочтительным.

+0

«Создание временных переменных не рекомендуется». - какая-то особая причина, почему нет? Вам нужно масштабировать это в каком-то измерении, возможно, увеличивая количество N списков одновременно, а не на два? Практически любое решение потребует временных переменных, но мы все равно можем сделать его максимально чистым. – user2357112

+0

создавать временные переменные –

+0

В python вы можете просто расширять списки с помощью оператора «+». Это должно быть хорошей отправной точкой. – ishaan

ответ

4

Почему бы не передать функции два параметра

def func(l1 ,l2): 
    return l1+[-1,2],l2+[4,1] 

f = [1,2] 
g = [3,4] 
f,g = func(f,g) 
print f,g 

производит

[1, 2, -1, 2] [3, 4, 4, 1] 

Однако, это может быть проще, чтобы функция расширить списки и избежать возвращаемое значение вообще

def func(l1 ,l2): 
    l1.extend([-1,2]) 
    l2.extend([4,1]) 

f = [1,2] 
g = [3,4] 
func(f,g) 
print f,g 
+0

Это неправильно, функция действительно не заботится о входах, она просто добавляет ... –

+0

@KarolyHorvath Я вижу вашу точку, но OP назначает/хочет использовать возвращаемое значение, поэтому я предложил что-то, что работает под этой моделью – Pynchia

+1

Люди хотят делать все виды странных вещей, помогая делать это не обязательно хорошая идея. –

3

Если этот вопрос более общий, и вы не можете изменить свою функцию, используйте zip:

>>> f,g = (x+y for x,y in zip((f,g), func())) 
>>> f 
[1, 2, -1, 2] 
>>> g 
[3, 4, 4, 1] 
Смежные вопросы