まず解決策:各繰り返しでリストを構築し、
a, b = zip(*[f(i) for i in range(5)])
異なるソリューション、:我々は
def f(i):
return i, 2*i
# First make a list of all your results
l = [f(i) for i in range(5)]
# [(0, 0), (1, 2), (2, 4), (3, 6), (4, 8)]
# then transpose it using zip
a, b = zip(*l)
print(list(a))
print(list(b))
# [0, 1, 2, 3, 4]
# [0, 2, 4, 6, 8]
それとも、すべて1行でそれをトランスポーズ、その後、すべての結果のリストを作ります彼らが構築されているときには、それらを使用できるように:
def f(i):
return 2*i, i**2, i**3
doubles = []
squares = []
cubes = []
results = [doubles, squares, cubes]
for i in range(1, 4):
list(map(lambda res, val: res.append(val), results, f(i)))
print(results)
# [[2], [1], [1]]
# [[2, 4], [1, 4], [1, 8]]
# [[2, 4, 6], [1, 4, 9], [1, 8, 27]]
print(cubes)
# [1, 8, 27]
注意についてlist(map(...))
:Python3ではmap
がジェネレータを返すので、ラムダを実行するにはそれを使用する必要があります。 list
です。
forループの各繰り返しで関数を呼び出す必要がありますか? – iafisher
リストの数は、関数によって返されたタプルの要素の数と常に等しいか、関数がただ1つのものだけを返す場合は、その1つの項目をすべてのリストに追加しますか?あなたの質問は少し曖昧です。 – martineau
"Python"コードを書いておきたいなら、[PEP 8 - Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/)を読んで、それに従うことをお勧めします。他の多くのものの中で、4つのスペースであなたの字下げを示唆しています。 – martineau