计算合并字符串的得分
问题描述:
我想弄清楚如何计算两个合并名称列表的分数。我需要给每个字符一个点(包括名字和空格之间的空格)加上名字中每个元音的一个点。计算合并字符串的得分
a = ["John", "Kate", "Oli"]
b = ["Green", "Fletcher", "Nelson"]
vowel = ["a", "e", "i", "o", "u"]
gen = ((x, y) for x in a for y in b)
for u, v in gen:
print u, v
我在努力弄清楚该怎么做。任何帮助将不胜感激。
答
for first, second in gen:
name = " ".join(first, second)
score = 0
for letter in name:
if letter in vowel:
score += 1
score += len(name)
将它们作为字符串比较容易,然后可以遍历该字符串。每个字符一个点很容易,这只是字符串的长度。如果元音是一个额外的字母,只是循环字母,如果元音添加一个点。瞧!
答
所以你首先zip
姓氏和名字,然后进行再str
与' '
作为分隔符。然后用collections.Counter
计算出多少次所谓的元音字符发生,sum
他们起来,并且加上len
这个全名。而这将是dict
的对象,那么你可以做任何你喜欢的事情。
from collections import Counter
a = ["John", "Kate", "Oli"]
b = ["Green", "Fletcher", "Nelson"]
vowel = ["a", "e", "i", "o", "u"]
output = {}
for item in [' '.join(i) for i in zip(a,b)]:
output[item] = sum(Counter(item)[x] for x in vowel) + len(item)
output
输出:
{'John Green': 13, 'Kate Fletcher': 17, 'Oli Nelson': 13}
UPDATE
如果你需要的名字和姓氏的所有可能的变化,你可以做到这一点与itertools.product
from itertools import product
from collections import Counter
a = ["John", "Kate", "Oli"]
b = ["Green", "Fletcher", "Nelson"]
vowel = ["a", "e", "i", "o", "u"]
output = {}
for item in [' '.join(i) for i in product(a,b)]:
output[item] = sum(Counter(item)[x] for x in vowel) + len(item)
output
输出:
{'John Fletcher': 16,
'John Green': 13,
'John Nelson': 14,
'Kate Fletcher': 17,
'Kate Green': 14,
'Kate Nelson': 15,
'Oli Fletcher': 15,
'Oli Green': 12,
'Oli Nelson': 13}
这里的输出是什么? –
@vishes_shell全名:约翰·格林得分:13 全名:约翰·弗莱彻得分:16 全名:约翰·尼尔森得分:14 全名:凯特·格林得分:14 全名:凯特·弗莱彻得分:17 全名:凯特尼尔森评分:15 全名:Oli Green评分:13 全名:Oli Fletcher评分:16 全名:Oli Nelson评分:14 –