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

时间:2015-05-05 02:21:10

标签: python list

我有这段代码:

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

结果是:

[10, 14]

此代码段的工作原理如何?它是[a for a,b in list]的内置函数,用于获取python中列表中每个2个字母单词的第一个字母?

4 个答案:

答案 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部分实际上解包了字符串TSAD。循环变量ab被分配给hand元素。这就像

(a, b) = 'TS'

此处a分配给T,b设置为S

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

注意:如果hand包含非双字母单词,则无效。

答案 3 :(得分:0)

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