2016-01-20 4 views
0

У меня есть следующий код.распаковка строки со списком python

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

так рука теперь список строк ['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]

Я не вижу его в списке Ряды понимания.

Спасибо!

ответ

0

Проверьте, что [(r,s) for r, s in hand] дает вам. Это

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

Это потому, что вы распаковать 2-буквенные строки в r и s (каждая строка представляет собой итерацию).

Итак, когда вы делаете index(r), вы ищете только индекс первого символа.

0

Строки, как и списки, могут быть пропущены через. Например:

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

Таким образом, когда вы делаете for r, s in hand, это делает:

r = '6' 
s = 'C' 

Для каждого элемента (очевидно другое значение для каждого элемента)

+0

Спасибо! Я забыл метод распаковки. –

+0

@ RalphV.L Нет проблем! Не забудьте принять ответ, нажав галочку под моим счетом :) – TerryA

1

Каждый элемент рука строка с двумя символами.

Во время формирования ranks, что вы делаете для каждого элемента hand, распаковка строки на две отдельные переменные.

Таким образом, в переменной r, вы получите

6 7 8 9 T ... 

И, в переменной s, вы получите:

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 

И так далее!

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 бит разделяет каждый два -character длинной строки в r и s, затем складывает их в кортеж. Ваш код немного отличается тем, что он не помещает их в кортеж, он просто использует r в качестве аргумента функции index.

Смежные вопросы