0

我得到了以下代码。

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]

我在排名列表理解中看不到它。

谢谢!

4

4 回答 4

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

等等!

于 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位将每个两个字符的长字符串拆分为rand s,然后将它们放在一个元组中。您的代码有点不同,因为它没有将它们放入元组中,它只是使用 ther作为index函数的参数。

于 2016-01-20T04:25:29.650 回答