У меня есть функция, которая возвращает два значения, и я хотел бы использовать понимание списка для заполнения двух списков. , например:python list comprehension для множественной функции возврата
def f(x):
return 2*x,x*x
x = range(3)
xlist, ylist = [f(value) for value in x]
EDITS from answers below:
xtuple, ytuple = zip(*[f(value) for value in x])
xlist, ylist = map(list,zip(*[f(value) for value in x]))
где ожидаемый доход должен быть:
xlist = [0, 2, 4]
ylist = [0, 1, 4]
мой вопрос сводится к:
В настоящее время я получаю список кортежей, в то время как это разумно я закончу требующих двух независимых списков. в настоящее время у меня может быть переменная 1 placeholder (кортеж) и 3 полных понимания. Но мне интересно, есть ли чистый способ сделать это с использованием единого списка.
Стоит отметить: в реальном коде мои два возвращения коррелированы, поэтому я не могу просто разделить функцию на две.
не следует использовать список понимания сделать два списка. Вы можете, конечно, использовать 'zip', чтобы перенести свой список кортежей в два списка, но зачем пытаться обучать коверу понимание списка здесь? Просто перебирайте свои кортежи и добавляйте к двум спискам ... держите это просто. –
@ juanpa.arrivillaga: Я не знаю, согласен ли я с этим: в первую очередь понимание списков работает быстрее, чем добавление (в одном списке, действительно, при подаче двух списков он может быть менее эффективным). Кроме того, декларативный стиль использует не так много операций с побочными эффектами: у понимания списка обычно нет побочных эффектов: обычно пишется код, удобный для * читателей *, а не * писателей *. Кроме того, почему этот вопрос занижен? –
@WillemVanOnsem Я не делал это вниз, для записи. Но, используя понимание, *, а затем * застегивая его, скорее всего, * не * будет быстрее, если только вы не используете понимание генератора, поэтому вы делаете это за один проход, а не сначала создавайте список кортежей в память. Но тогда, скорее всего, перенос цикла for в функцию, скорее всего, даст вам хорошую или лучшую производительность, чем использование генератора (что снижает производительность). Кроме того, это вопрос стиля и читаемости, но я думаю, что это субъективно. –