我以前问过这个问题,但由于我没有得到关于应该在哪里更改代码的明确答复,我将在这里再次问这个问题:(
所以我试图分析我的列表h,看看对于列表中的x,元素中第一个字符的两对是否是
例如,
['AS', 'AD', 'CC', 'CH', 'CS'] returns False because there are 3 C and 2 , but there are supposed to be 2 of the same elements and one of a completely different element.
['AS', 'AD', 'SC', 'SH', 'CS'] returns True because there are 2 A, 2 S and one C.
['CS', 'CD', 'AC', 'AH', 'FS'] returns True because there are 2 C, 2 A and one F
['AS', 'CD', 'AC', 'CH', 'DS'] returns False because although there are two A, two C and one D, the A and C are not in order
这是我迄今为止的代码。。。
def two_pairs(h):
for x in h:
pairing = list[x[1]]
if (pairing[1] == pairing[2]) and (pairing[3] == (pairing[4])):
return True
if (pairing[3] == pairing[4]) and (pairing[0] == (pairing[1])):
return True
if (pairing[0] == pairing[1]) and (pairing[3] == (pairing[4])):
return True
else:
return False
print(two_pairs(['9r, 9♣, 4♠, 4♣, 10♣']))
这根本不起作用,我收到一条错误消息,上面写着
if (pairing[1] == pairing[2]) and (pairing[3] == (pairing[4])):
TypeError: There are no type variables left in list['r']
我该换什么??
注意:后面的字符可以是从数字到字母再到特殊字符的任何字符。
h
是一个字符串列表。这使得x
成为单个字符串
因此,x[1] == 'r'
和list()
是一个内置的Python函数,您正在使用list['r']
对其进行索引,这对于您想要做的事情来说是无效的语法。
你在上一篇文章中接受的答案似乎是你想要的,输入是字符串的列表,而不是一个字符串的列表。
例如,从print(two_pairs(['9r', '9♣', '4♠', '4♣', 10♣']))
开始,但是这些字符串都没有超过两个字符,所以它在pairing[2]
附近仍然会失败,例如
是它们的两对元素中的第一个字符,还是不是
从这个开始
l = ['AS', 'AD', 'CC', 'CH', 'CS']
first = l[0][0]
print(2 == sum(x.count(first) for x in l)) # True
或者
l = ['AS', 'AD', 'CC', 'CH', 'CS']
firsts = [x[0] for x in l]
print({f: sum(x.count(f) for x in l) for f in firsts}) # {'A': 2, 'C': 4}