[英]unpacking a string with list comprehension 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]
我在排名列表理解中看不到它。
謝謝!
手的每個元素都是由兩個字符組成的字符串。
在形成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')]
然后,您將在字符串--23456789TJKA
中使用每個r
的索引來構成列表ranks
讓我們看看它是如何工作的:
>>"--23456789TJKA".index('6')
>> 6
>>"--23456789TJKA".index('7')
>> 7
>>"--23456789TJKA".index('8')
>> 8
等等!
檢查[(r,s) for r, s in hand]
有什么。 它的
[('6', 'C'), ('7', 'C'), ('8', 'C'), ('9', 'C'), ('T', 'C')]
這是因為您將2個字母的字符串解壓縮為r
和s
(每個字符串都是可迭代的)。
因此,當您執行index(r)
,您僅在搜索第一個字符的索引。
字符串(如列表)可以被迭代。 例如:
>>> for s in 'string':
... print s
...
s
t
r
i
n
g
因此,當您for r, s in hand
做for r, s in hand
,它會:
r = '6'
s = 'C'
對於每個項目(顯然每個項目都有不同的值)
您從以下內容開始:
>>> 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
的for r, s in hand
位將每個兩個字符的長字符串分成r
和s
,然后將它們放到一個元組中。 您的代碼有些不同,因為它不會將它們放入元組,而只是將r
用作index
函數的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.