获取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:是的,你可以这样想