2016-10-12 2 views
1

Ich versuche herauszufinden, wie Sie die Punkte von zwei zusammengeführten Namenslisten berechnen. Ich muss einen Punkt für jedes Zeichen (einschließlich Leerzeichen zwischen Vor- und Nachname) plus einen Punkt für jeden Vokal im Namen angeben.Berechnen der Punktzahl der zusammengeführten Zeichenfolge

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 

Ich bin schwer zu finden, was zu tun ist. Jede Hilfe würde sehr geschätzt werden.

+1

Was ist die gewünschte Ausgabe hier? –

+1

@vishes_shell Vollständiger Name: John Green Score: 13 Vollständiger Name: John Fletcher Score: 16 Vollständiger Name: John Nelson Score: 14 Vollständiger Name: Kate Green Score: 14 Vollständiger Name: Kate Fletcher Score: 17 Vollständiger Name : Kate Nelson Score: 15 Voller Name: Oli Green Punktzahl: 13 Voller Name: Oli Fletcher Punktzahl: 16 Vollständiger Name: Oli Nelson Score: 14 –

Antwort

0

Es ist einfacher, sie als eine Zeichenfolge zu haben, Sie können dann über diese Zeichenfolge Schleife. Ein Punkt pro Zeichen ist einfach, das ist nur die Länge der Zeichenfolge. Wenn der Vokal ein zusätzlicher Buchstabe ist, schleife einfach über Buchstaben und wenn Vokal einen Punkt hinzufügt. Voila!

1

Also zuerst zip Vor- und Nachnamen, dann machen Sie dann str mit ' ' als Trennzeichen. Und dann mit collections.Counter zählen, wie oft so genannte Vokal Zeichen auftreten, sum sie auf, und fügen len des ganzen Namens. Und das wäre dict Objekt, dann kannst du damit machen was du willst.

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 

Ausgang:

{'John Green': 13, 'Kate Fletcher': 17, 'Oli Nelson': 13} 

UPDATE

Wenn Sie alle möglichen Variationen des Vornamens und Nachname müssen Sie tun können, dass mit 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 

Ausgang:

{'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} 
Verwandte Themen