1

私はリストを持っていました、例えば:

data=['January', 'February', 'March',
      2007, 2008, 2009,
      'value1', 'value2', 'value3']

次に、タプルのリストを次の形式で作成する必要があります

[('January', 2007,'value1'),('February', '2007','value2'),('March', 2007,'value3'),
('January', 2008,'value1'),('February', 2008,'value2'),('March', 2008,'value3'),
('January', 2009,'value1'),('February', 2009,'value2'),('March', 2009,'value3')] 

コンセプトを教えてください

4

3 に答える 3

1

あなたの質問はあなたが何を望んでいるのかについて少し曖昧だったので、いくつかの解決策があります。ここに私が提案する解決策があります.

必要に応じて、最初のステップはリストを独立したリストに分割することです。これを行う最もクリーンな方法は、ジェネレーターを使用することです (リストではなくジェネレーターに対してこれを行う方法は他にもありますが、ユースケースではやり過ぎです):

def segments(l, n):
    for i in range(0, len(l), n): #Use xrange in python 2.x
        yield l[i:i+n]

ジェネレーター式を使用することは完全に可能ですが、特に読みやすくはありません。

(data[y:y+3] for y in range(0, len(data), 3))

どこで を使用segments(data, 3)しても、代わりにこのジェネレータ式を使用できますが、より読みやすいバージョンに固執します。

Matched の出力が必要な場合(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')]

3 つのリストを引数として展開し、項目zip()のジェネレーターを提供し(month, year, value)ます。

のすべての組み合わせが(month, year, value)必要な場合は、次を使用できますitertools.product()

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)]
于 2012-04-18T14:22:39.673 に答える
1

何かのようなもの:

>>> l1 = ['January', 'February', 'March']
>>> l2 = [2007,2008,2009]
>>> l3 = ['value1','value2','value3']
>>> for year in l2:
...     print zip(l1, [year] * len(l1), l3)
...
[('January', 2007, 'value1'), ('February', 2007, 'value2'), ('March', 2007, 'value3')]
[('January', 2008, 'value1'), ('February', 2008, 'value2'), ('March', 2008, 'value3')]
[('January', 2009, 'value1'), ('February', 2009, 'value2'), ('March', 2009, 'value3')]

指定されたリストをツリーの断片に分割することは、OP の課題として残されています。

于 2012-04-18T14:26:54.913 に答える
0
>>> from itertools import product,cycle
>>> data = ['January','February','March', 2007,2008,2009,'value1','value2','value3']
>>> block = 3
>>> months,years,values = zip(*[iter(data)]*block)
>>> [(m,y,v) for (y,m),v in zip(product(years,months),cycle(values))]
[('January', 2007, 'value1'), ('February', 2007, 'value2'), ('March', 2007, 'value3'),
 ('January', 2008, 'value1'), ('February', 2008, 'value2'), ('March', 2008, 'value3'), 
 ('January', 2009, 'value1'), ('February', 2009, 'value2'), ('March', 2009, 'value3')]
于 2012-04-18T16:05:19.907 に答える