あなたの質問が少し曖昧だったので、いくつかの解決策があります。私が提案する解決策はここにあります。
最初のステップは、リストを独立したリストに分割することです。これを行うにはクリーンな方法は、発電機である(そこリストとは対照的に、発電機のためにこれを行うためのother waysですが、ご使用のケースのためにやり過ぎだと):
def segments(l, n):
for i in range(0, len(l), n): #Use xrange in python 2.x
yield l[i:i+n]
それはジェネレータ式を使用することは完全に可能ですが、それは特に読めない:私はsegments(data, 3)
を使用どこ
(data[y:y+3] for y in range(0, len(data), 3))
は、あなたの代わりにこのジェネレータ式を使用することができますが、私は、より読みやすいバージョンに固執するでしょう。
あなたがマッチし(month, year, value)
の出力を望んでいた場合、その答えは非常に簡単です:
list(zip(*segments(data, 3)) #No need to use list() in 2.x
が生成されます
[('January', 2007, 'value1'), ('Febraury', 2008, 'value2'), ('March', 2009, 'value3')]
私たちは、私たちの発電機を与えるzip()
への引数として、当社の3つのリストを展開(month, year, value)
アイテム
あなたは、あなたがitertools.product()
を使用することができます(month, year, value)
の組み合わせのすべてを望んでいた場合:
from itertools import product
...
list(product(*segments(data, 3))
あなたが唯一たい場合、あなたの出力が示すように、月の一連の製品は、値と年に結ばあなたは必要になりますよう
from itertools import product
...
months, years, values = segments(data, 3)
[(month, year, value) for ((month, value), year) in product(zip(months, values), years)]
これは有効なPythonではないので、リストを正確に見たいとは思っていません。それを修正してください。 – ch3ka
変数 'list'を呼び出すのは良い方法ではありません。なぜなら、組み込みの' list'にアクセスできなくなるからです。 – jamylak
@jamylakこれは修正されているように見え、編集者によって再導入されました。私は '' data''を使って編集します。私は、タプルのリストは、行末にカンマを持つことを意図していたと推定しています。 –