-1

私がリストを持っているとしましょう:

my_list = ["A", "B", "C", "X", "X", "X"]

X値を別のリストまたは私の場合は2Dリストの値に置き換えたい(このリストは、リスト内の「X」の数と等しい繰り返し数で生成されます):

combinations = list(itertools.product('LE', repeat= 3))

それで

combinations = [('L', 'L', 'L'), ('L', 'L', 'E'), ('L', 'E', 'L'), ('L', 'E', 'E'), ('E', 'L', 'L'), ('E', 'L', 'E'), ('E', 'E', 'L'), ('E', 'E', 'E')]

私の質問は、最初の結果が2番目の結果になるように、「X」値my_listを組み合わせの値に置き換える方法です。できれば、これらを2Dリストに入れて、印刷できるようにします。["A", "B", "C", "L", "L", "L"]["A", "B", "C", "L", "L", "E"]

編集:明確にするために、my_listは不明であり、「X」値は不明な方法で分散する可能性があります。

4

2 に答える 2

3

私は使うかもしれません:

def mergefill(to_fill, fill_char, fill_from):
    for filler in fill_from:
        it = iter(filler)
        yield [c if c != fill_char else next(it) for c in to_fill]

これは

>>> my_list = ["A", "B", "C", "X", "X", "X"]
>>> list(mergefill(my_list, 'X', product('LE', repeat=3)))
[['A', 'B', 'C', 'L', 'L', 'L'], ['A', 'B', 'C', 'L', 'L', 'E'], ['A', 'B', 'C', 'L', 'E', 'L'], ['A', 'B', 'C', 'L', 'E', 'E'], ['A', 'B', 'C', 'E', 'L', 'L'], ['A', 'B', 'C', 'E', 'L', 'E'], ['A', 'B', 'C', 'E', 'E', 'L'], ['A', 'B', 'C', 'E', 'E', 'E']]

また、塗りつぶし文字が連続していない場合も処理します。

>>> my_list = ["A", "X", "B", "X"]
>>> list(mergefill(my_list, 'X', product('LE', repeat=2)))
[['A', 'L', 'B', 'L'], ['A', 'L', 'B', 'E'], ['A', 'E', 'B', 'L'], ['A', 'E', 'B', 'E']]
于 2013-03-17T13:10:44.893 に答える
2

これを試して:

my_list = ['A', 'B', 'C', 'X', 'X', 'X']
new_list = [my_list[:3] + list(c) for c in itertools.product('LE',repeat=3)]
[['A', 'B', 'C', 'L', 'L', 'L'],                                                
 ['A', 'B', 'C', 'L', 'L', 'E'],                                                
 ['A', 'B', 'C', 'L', 'E', 'L'],                                                
 ['A', 'B', 'C', 'L', 'E', 'E'],                                                
 ['A', 'B', 'C', 'E', 'L', 'L'],                                                
 ['A', 'B', 'C', 'E', 'L', 'E'],                                                
 ['A', 'B', 'C', 'E', 'E', 'L'],                                                
 ['A', 'B', 'C', 'E', 'E', 'E']]

my_listの「X」の数を取得するには:

count = len(filter(lambda v: v == 'X',my_list))
于 2013-03-17T13:06:50.987 に答える