定義によると、シーケンスは、数字の順序で少なくとも3枚のカードの組み合わせです。
これはうまくいくと思います。私はスーツなしで5枚の異なるカード(1-5)のセットを想定しています。私はまた、数字が昇順でなければならないと仮定しています。私はそれを明確にする必要があります(asongtoruinに質問してくれてありがとう)。
import itertools
def all_card_sequences_of_size(cards, n):
return itertools.combinations(cards, n)
if __name__ == '__main__':
cards = [i + 1 for i in range(5)]
print(list(all_card_sequences_of_size(cards, 3)))
print(list(all_card_sequences_of_size(cards, 4)))
あなたが連続しているシーケンスを必要としないと仮定すると、出力
[(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5)]
[(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 4, 5), (1, 3, 4, 5), (2, 3, 4, 5)]
が、ここではそのためのソリューションがあります:
import itertools
def is_sequence_consecutive(sequence):
return all(a == b - 1 for a, b in zip(sequence[:-1], sequence[1:]))
def all_card_sequences_of_size(cards, n):
for sequence in itertools.combinations(cards, n):
if is_sequence_consecutive(sequence):
yield sequence
if __name__ == '__main__':
cards = [i + 1 for i in range(5)]
print(list(all_card_sequences_of_size(cards, 3)))
print(list(all_card_sequences_of_size(cards, 4)))
出力
[(1, 2, 3), (2, 3, 4), (3, 4, 5)]
[(1, 2, 3, 4), (2, 3, 4, 5)]
nの全ての可能な連続配列カードの数(N> = 3)を取得し、 "数値列" によって
import itertools
def is_sequence_consecutive(sequence):
return all(a == b - 1 for a, b in zip(sequence[:-1], sequence[1:]))
def all_card_sequences_of_size(cards, n):
for sequence in itertools.combinations(cards, n):
if is_sequence_consecutive(sequence):
yield sequence
def all_card_sequences(cards):
for i in range(3, len(cards) + 1):
yield from all_card_sequences_of_size(cards, i)
if __name__ == '__main__':
cards = [i + 1 for i in range(5)]
print(list(all_card_sequences(cards)))
出力
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (1, 2, 3, 4), (2, 3, 4, 5), (1, 2, 3, 4, 5)]
あなたは連続した数字を意味するか、ちょうど昇順ですか? – asongtoruin