用list comprehension python解压缩字符串

时间:2016-01-20 04:17:26

标签: python list list-comprehension poker argument-unpacking

我收到了以下代码。

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 个答案:

答案 0 :(得分:1)

hand的每个元素都是一个包含两个字符的字符串。

在形成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

等等!

答案 1 :(得分:0)

检查[(r,s) for r, s in hand]给你的内容。这是

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

这是因为您将2个字母的字符串解压缩到rs(每个字符串都是可迭代的)。

所以当你index(r)时,你只是在搜索第一个字符的索引。

答案 2 :(得分:0)

字符串,如列表,可以迭代。例如:

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

因此,当你正在做for r, s in hand时,它确实:

r = '6'
s = 'C' 

对于每个项目(显然每个项目的值不同)

答案 3 :(得分: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位将每个两个 - 字符长字符串拆分为rs,然后将它们放在一个元组中。您的代码有点不同,因为它没有将它们放入元组中,它只使用r作为index函数的参数。