2016-10-12 48 views
1

我想弄清楚如何计算两个合并名称列表的分数。我需要给每个字符一个点(包括名字和空格之间的空格)加上名字中每个元音的一个点。计算合并字符串的得分

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 

我在努力弄清楚该怎么做。任何帮助将不胜感激。

+1

这里的输出是什么? –

+1

@vishes_shell全名:约翰·格林得分:13 全名:约翰·弗莱彻得分:16 全名:约翰·尼尔森得分:14 全名:凯特·格林得分:14 全名:凯特·弗莱彻得分:17 全名:凯特尼尔森评分:15 全名:Oli Green评分:13 全名:Oli Fletcher评分:16 全名:Oli Nelson评分:14 –

回答

0
for first, second in gen: 
    name = " ".join(first, second) 
    score = 0 
    for letter in name: 
     if letter in vowel: 
      score += 1 
    score += len(name) 

将它们作为字符串比较容易,然后可以遍历该字符串。每个字符一个点很容易,这只是字符串的长度。如果元音是一个额外的字母,只是循环字母,如果元音添加一个点。瞧!

1

所以你首先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}