3つの値のリストがあり、そのうち2つは文字列です。そして、文字列を置き換える値を持つ別のリスト:
li = [1, 'a', 'b']
li2 = [2, 3, 4]
私が思ったのは、文字列を2番目のリストに置き換えて、itertools.combinations()
それを呼び出すことができるということでした。
li = [li2 if isinstance(x, str) else x for x in li]
li = [1, [2, 3, 4], [2, 3, 4]]
combo = list(itertools.combinations(li, 3)
しかし、それは私に同じリストのタプルを返すだけです。私が欲しかったのはのようなもの[1, 2, 3], [1, 2, 4], [1, 3, 4]
でした。私も順列を試しましたが、役に立ちませんでした。最初のリストの値をそのままにして、2つのリストから値のすべての組み合わせを取得するにはどうすればよいですか?
import itertools
li = [1, 'a', 'b']
li2 = [2, 3, 4]
def combinations_letters(li, li2):
li = list(li)
indexes = [i for i, x in enumerate(li) if isinstance(x, str)]
for comb in itertools.combinations(li2, r=len(indexes)):
for index, c in zip(indexes, comb):
li[index] = c
yield tuple(li)
print list(combinations_letters(li, li2))
この出力:
[(1, 2, 3), (1, 2, 4), (1, 3, 4)]
これは、内のすべての文字列のインデックスを見つけて、li
それらをの出力に置き換えることですitertools.permutations
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加