[英]Get the first letter of each 2-letter word in python
我有以下代码:
hand=["TS","AD"]
test=['--23456789TJQKA'.index(a) for a, b in hand]
print (test)
结果是:
[10, 14]
该代码段如何工作? 它是[用于列表中的a,b的a]的内置函数,以获取python中列表中每个2个字母的单词的第一个字母吗?
这是一种普通的列表理解,它会将手中的两个字母字符串拆分为字母元组
对于第一手要素:
a, b in 'TS'
# a == 'T'
# b == 'S'
'--23456789TJQKA'.index('T')
# 10
对于第二个要素:
a, b in 'AD'
# a == 'A'
# b == 'D'
'--23456789TJQKA'.index('A')
# 14
首先,让我们将代码转换为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
每个元素都是两个元素的迭代。 这意味着, for a,b in hand
遍历每个串hand
,分配第一个字符到a
和第二至b
。 这实际上与以下内容相同:
for mystr in hand:
a = mystr[0]
b = mystr[1]
# or equivalently, a,b = mystr
下一块是'--23456789TJQKA'.index(a)
,其简单地返回的第一次出现的索引a
字符串'--23456789TJQKA'
。
因此,输出最终是两个数字的列表- hand
每个字符串的第一个字符的索引,即'T'
和'A'
在这里, for a, b in hand
部分实际上解压缩了字符串TS
和AD
。 循环变量a
和b
被分配给hand
元素。 就像
(a, b) = 'TS'
在这里,a分配给T
,b设置为S
之后,该.index
方法仅查找a
并返回其索引。
注意:如果hand
包含非两个字母的单词,此功能将无效。
该代码与使用标准52卡座的扑克牌或其他纸牌游戏有关。 test
将是玩家手的顺序“等级”列表(“套装”未保存)。 它使用元组拆包在列表推导中将手的“等级”放入a
,将“西装”放入b
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.