获取python中每个2个字母单词的第一个字母

获取python中每个2个字母单词的第一个字母,python,list,Python,List,我有以下代码: hand=["TS","AD"] test=['--23456789TJQKA'.index(a) for a, b in hand] print (test) 结果是: [10, 14] 这个代码段是如何工作的?在python中,获取列表中每个两个字母单词的第一个字母是[a代表a,b代表列表]的内置函数吗?这是一个普通的列表理解,将手中的两个字母字符串拆分为字母元组 对于手的第一个元素: a, b in 'TS' # a == 'T' # b == 'S' '--2345

我有以下代码:

hand=["TS","AD"]
test=['--23456789TJQKA'.index(a) for a, b in hand]
print (test)
结果是:

[10, 14]

这个代码段是如何工作的?在python中,获取列表中每个两个字母单词的第一个字母是[a代表a,b代表列表]的内置函数吗?

这是一个普通的列表理解,将手中的两个字母字符串拆分为字母元组

对于手的第一个元素:

a, b in 'TS'
# a == 'T'
# b == 'S'

'--23456789TJQKA'.index('T')
# 10
a, b in 'AD'
# a == 'A'
# b == 'D'

'--23456789TJQKA'.index('A')
# 14
对于手的第二个元素:

a, b in 'TS'
# a == 'T'
# b == 'S'

'--23456789TJQKA'.index('T')
# 10
a, b in 'AD'
# a == 'A'
# b == 'D'

'--23456789TJQKA'.index('A')
# 14

这是一个普通的列表理解,将手中的两个字母字符串拆分为字母元组

对于手的第一个元素:

a, b in 'TS'
# a == 'T'
# b == 'S'

'--23456789TJQKA'.index('T')
# 10
a, b in 'AD'
# a == 'A'
# b == 'D'

'--23456789TJQKA'.index('A')
# 14
对于手的第二个元素:

a, b in 'TS'
# a == 'T'
# b == 'S'

'--23456789TJQKA'.index('T')
# 10
a, b in 'AD'
# a == 'A'
# b == 'D'

'--23456789TJQKA'.index('A')
# 14

这里
对于a,b在手
部分实际上解压了字符串
TS
AD
。循环变量
a
b
分配给
hand
元素。就像

(a, b) = 'TS'
此处a被分配给
T
,b被设置为
S

然后,
.index
方法只查找
a
并返回它的索引


注意:如果
hand
包含非两个字母的单词,则此操作无效

这里
对于a,b在手
部分实际解压字符串
TS
AD
。循环变量
a
b
分配给
hand
元素。就像

(a, b) = 'TS'
此处a被分配给
T
,b被设置为
S

然后,
.index
方法只查找
a
并返回它的索引


注意:如果
hand
包含非两个字母的单词,则此操作无效

首先,让我们将代码转换为for循环:

hand = ["TS","AD"]
test = []
for a,b in hand:
    test.append('--23456789TJQKA'.index(a))
# note that we didn't use b

print(test)
那么这里发生了什么事?
嗯,
hand
中的每个元素都是一个包含两个元素的iterable。这意味着
对于a,b在手
迭代
在手
中的每个字符串,将第一个字符分配给
a
,将第二个字符分配给
b
。这实际上与:

for mystr in hand:
    a = mystr[0]
    b = mystr[1]
    # or equivalently, a,b = mystr
下一段是
'--23456789TJQKA'。索引(a)
,它只返回字符串
'--23456789TJQKA'
中第一次出现的
a
的索引


因此,输出结果是一个由两个数字组成的列表-
中每个字符串的第一个字符的索引,即
'T'
'a'
首先,让我们将代码转换为for循环:

hand = ["TS","AD"]
test = []
for a,b in hand:
    test.append('--23456789TJQKA'.index(a))
# note that we didn't use b

print(test)
那么这里发生了什么事?
嗯,
hand
中的每个元素都是一个包含两个元素的iterable。这意味着
对于a,b在手
迭代
在手
中的每个字符串,将第一个字符分配给
a
,将第二个字符分配给
b
。这实际上与:

for mystr in hand:
    a = mystr[0]
    b = mystr[1]
    # or equivalently, a,b = mystr
下一段是
'--23456789TJQKA'。索引(a)
,它只返回字符串
'--23456789TJQKA'
中第一次出现的
a
的索引


因此,输出结果是一个由两个数字组成的列表,即
手牌中每个字符串的第一个字符的索引,即
'T'
'a'
该代码与使用标准52卡牌组的扑克或其他纸牌游戏有关<代码>测试
将是玩家手牌的顺序“等级”列表(不保存“套装”)。它使用元组解包将手的“等级”放入列表理解中的
a
,将“套装”放入
b

该代码与扑克或使用标准52卡牌组的其他纸牌游戏有关<代码>测试
将是玩家手牌的顺序“等级”列表(不保存“套装”)。它使用元组解包将手的“等级”放入列表理解中的
a
,将“套装”放入
b

对于记录,虽然此代码有效,但并不好。将每张卡片分成
a,b
而不是仅仅使用
card[0]
(特别是将它们称为
a
b
而不是说
value
suit
),这有点模糊,
dict
会比
列表
做得更好,在列表理解之前定义一次
'--23456789TJQKA'
将停止在每次迭代中重新创建它(除非python正在进行一些古怪的内部优化)。对于2次迭代来说,这不是一个真正的问题,但仍然值得注意。请注意,虽然这段代码可以工作,但并不好。将每张卡片分成
a,b
而不是仅仅使用
card[0]
(特别是将它们称为
a
b
而不是说
value
suit
),这有点模糊,
dict
会比
列表
做得更好,在列表理解之前定义一次
'--23456789TJQKA'
将停止在每次迭代中重新创建它(除非python正在进行一些古怪的内部优化)。这不是2次迭代的真正问题,但仍然值得注意。是的,它来自扑克程序。但是我只是想知道这个算法是如何工作的,这样它就可以应用于更广泛的用途。我以为你在试图理解一些你一无所知的代码。如上所述,代码不适合更广泛的使用:)是的,它来自扑克程序。但是我只是想知道这个算法是如何工作的,这样它就可以应用于更广泛的用途。我以为你在试图理解一些你一无所知的代码。如上所述,代码不适合更广泛的使用:)非常感谢您的回复。所以我可以这样理解吗,对于python中的字符串,它可以被视为一个列表,每个字母都是一个列表值?@Echo:是的,你可以这样想