我有这段代码:
hand=["TS","AD"]
test=['--23456789TJQKA'.index(a) for a, b in hand]
print (test)
结果是:
[10, 14]
此代码段的工作原理如何?它是[a for a,b in list]的内置函数,用于获取python中列表中每个2个字母单词的第一个字母?
答案 0 :(得分: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
答案 1 :(得分:2)
首先,让我们将代码转换为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'
答案 2 :(得分:0)
此处for a, b in hand
部分实际上解包了字符串TS
和AD
。循环变量a
和b
被分配给hand
元素。这就像
(a, b) = 'TS'
此处a分配给T
,b设置为S
。
之后.index
方法只查找a
并返回它的索引。
注意:如果hand
包含非双字母单词,则无效。
答案 3 :(得分:0)
该代码与使用标准52卡牌的扑克或其他纸牌游戏有关。 test
将是玩家手牌的序数“等级”列表(“套装”未保存)。它使用元组解包将手的“等级”放入a
,将“套装”放入列表推导中的b
。