簡體   English   中英

用列表理解python解包字符串

[英]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個字母的字符串解壓縮為rs (每個字符串都是可迭代的)。

因此,當您執行index(r) ,您僅在搜索第一個字符的索引。

字符串(如列表)可以被迭代。 例如:

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

因此,當您for r, s in handfor 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 handfor r, s in hand位將每個兩個字符的長字符串分成rs ,然后將它們放到一個元組中。 您的代碼有些不同,因為它不會將它們放入元組,而只是將r用作index函數的參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM