0

次のコードを取得しました。

hand = '6C 7C 8C 9C TC'.split()

そのため、 hand は文字列のリストになりました ['6C', '7C', '8C', '9C', 'TC']

それから

ranks = ["--23456789TJKA".index(r) for r, s in hand]

ランクは今[6, 7, 8, 9, 10]

目的は、カードのランクに適切な数値を与えてソートできるようにすることです。つまり、「T」->10、「J」->11、「Q」-12、「K」->13、および「A」->14 です。 .

なぜそれが機能するのか理解できません!

  • リストから項目を取得するにはlist[item]
  • 文字列をスライスすることは"string"[0]

ランクリストの理解ではわかりません。

ありがとうございました!

4

4 に答える 4

1

hand のすべての要素は、2 文字の文字列です。

の形成時にranks、あなたがしているのは、の各要素に対してhand、文字列を2つの別々の変数にアンパックすることです。

したがって、変数rでは、次のようになります

6 7 8 9 T ...

そして、 variablesでは、次のようになります。

C C C C C ....

これを見てみましょう。

[(r,s) for r, s in hand]

出力:

[('6', 'C'), ('7', 'C'), ('8', 'C'), ('9', 'C'), ('T', 'C')]

そして、文字列内ranksのそれぞれのインデックスでリストを形成していますr--23456789TJKA

これがどのように機能するか見てみましょう:

>>"--23456789TJKA".index('6')
>> 6
>>"--23456789TJKA".index('7')
>> 7
>>"--23456789TJKA".index('8')
>> 8

等々!

于 2016-01-20T04:23:45.707 に答える
0

何があなたに与えるかを確認して[(r,s) for r, s in hand]ください。これは

[('6', 'C'), ('7', 'C'), ('8', 'C'), ('9', 'C'), ('T', 'C')]

これは、2 文字の文字列をrandに展開するためですs(各文字列は反復可能です)。

したがって、 を実行するindex(r)と、最初の文字のインデックスのみが検索されます。

于 2016-01-20T04:21:41.397 に答える
0

文字列は、リストと同様に繰り返し処理できます。例えば:

>>> for s in 'string':
...     print s
... 
s
t
r
i
n
g

したがって、あなたがやっているときfor r, s in hand、それはします:

r = '6'
s = 'C' 

アイテムごとに(明らかにアイテムごとに異なる値)

于 2016-01-20T04:22:44.343 に答える
0

あなたはから始めています:

>>> hand = ['6C', '7C', '8C', '9C', 'TC']

したがって、これを行うとどうなるかを考えてください。

>>> [(r, s) for r, s in hand]
[('6', 'C'), ('7', 'C'), ('8', 'C'), ('9', 'C'), ('T', 'C')]

このfor r, s in handビットは、各2文字の長い文字列をrsに分割し、それらをタプルにまとめます。あなたのコードは、それらをタプルに入れず、関数rへの引数として使用するだけであるという点で少し異なりindexます。

于 2016-01-20T04:25:29.650 に答える