2016-11-03 10 views
-1

カード(タプル)のリストがあるとしましょう。例えば、特定の要素(カード)を含むタプルの削除

[('H[A]', 'S[2]'), ('H[A]', 'H[3]'), ('H[A]', 'H[4]')....]

H [A]:ハートのエース& S [2]:スペードの2。

カードのリストは、10枚のカードのデッキから取り出し可能な1組のカードのすべての固有の組み合わせを表します。私はすべて私が今やりたい何

def chooseobjects(r): 
    """ 
    Finds all unique pairs of cards in a deck of 10 cards. 
    Mathematically, this is just nCr. i.e., 10C2 is 10 Choose 2. 
    """ 
    results = list(itertools.combinations(["H[A]","H[2]","H[3]","H[4]","H[5]", 
              "S[A]","S[2]","S[3]","S[4]","S[5]", 
              ],r)) 
    return results 

def draw(n,cards): 
    """ 
    Draw n pair(s) of card from all the unique pairs generated from chooseobjects method. 
    """ 
    random.shuffle(cards) 
    return [cards.pop() for k in range(n)] 

cards=chooseobjects(2) 
print("These are all the different unique combinations: "'\n',cards) 
n=1 
ding=draw(n,cards) 
print("We randomly drew this pair: "'\n', ding) 
print("The remaining unique pairs: "'\n',cards) 

enter image description here

(各組み合わせは、カードのペアを持っている)、すべてのユニークな組み合わせを一覧表示し、それらをシャッフルし、それから1つの組み合わせを描くことだったがためであります'H [2]'または 'S [4]'を含むペアを削除/削除します。その後、更新されたリストを返します。

アイデア?お知らせ下さい!どんな助けでも大歓迎です!

EDIT: -ATTEMPT-

[p for p in cards if "H[2]" not in p and "S[4]" not in p] 

上記のコードは、H [2]及びS [4]は存在しないタプルのリストを返します。

H [2]とS [4]を明示的に宣言する必要はなく、暗黙的にリスト内包に渡すよりエレガントな方法がありますか?お知らせ下さい!

EDIT 2: -SOLVED-

したがって、溶液は '[4] S' リストJに二つの要素 'H [2]' とを付加することです。

j=[j for item in ding for j in item] 

リストjの各要素は文字列型です。つまり、

リストの理解度を作成して、「カード」リストの各タプルを反復処理します。 j [0]とj [1]がタプルに現れない場合は、それらをすべて新しいリストに追加します。

+0

これはどのような試みですか? – TigerhawkT3

+0

私は非常に貧弱な試みをしていましたが、ここには含めませんでした。私はしかし、家に帰るとすぐにその試みを追加します。 – misheekoh

+0

ちょうど私の試みが追加されました!どんな助けも素晴らしいだろう。ありがとう – misheekoh

答えて

-1

リストにタプルの組み合わせをmy_listとして格納しているとします。その中にH[2]S[4]を持っていないすべてのペアが含まれますnew_listここ

new_list = [card_pair for card_pair in my_list if 'H[2]' not in card_pair and 'S[4]' not in card_pair] 

:あなたは通りのリストをフィルタリングするリスト内包を使用することができます。

+0

変更リストにアクセスするには、元の完全なリストのインデックスからインデックスを使用しています。最初の削除の後、あなたは間違ったインデックスを取得し始めます。削除しているリストの長さが、あなたが見ているインデックスよりも短くなった後は、次に削除しようとしたときに 'IndexError'が出ます。 – TigerhawkT3

+0

@ TigerhawkT3:はい、あなたは正しいです。 –

-1

あなたはこのような何かを試みることができる:

cards = [(card1, card2) for (card1, card2) in cards if card1 not in ding[0] and card2 not in ding[0]] 
+0

'card1'と' card2'はタプルを保持し、 'card1'と' card2'はそれらのタプルの要素であるため 'ding'にはありません。例えば、[( 'H [2]'、 'S [4]')]の '' H [2] 'は 'False'です。 – TigerhawkT3

+0

ここでの一般的な考え方は、H [2]と[S [4]の両方の要素にアクセスすることです。次に、カードリストを繰り返し、これらの要素が存在するかどうかを確認します。そうであれば、タプルを削除/削除します。 – misheekoh

+0

だから、彼はちょうど 'ding [0]'をチェックインする必要があります。 – Fejs

0

ので、解決策は、 '[4] S' リストJに二つの要素 'H [2]' とを付加することです。

j=[j for item in ding for j in item] 

リストjの各要素は文字列型です。すなわち、、

次に、「カード」リストの各タプルを繰り返し処理するリストの理解度を作成します。 j [0]とj [1]がタプルに現れない場合は、それらをすべて新しいリストに追加します。

[p for p in cards if j[0] not in p and j[1] not in p] 
関連する問題