2016-08-03 24 views
1

Ich versuche ein Wort vollständig zu kapitalisieren und seine Länge in eine neue Liste aufzunehmen, indem ich das Listenverständnis verwende.Wie habe ich zwei Elemente in einem Index, wenn ich Python-Listen-Comprehensions verwende?

Zum Beispiel, wenn ich wordLengths(["hello","bye","greetings"]) eingegeben habe, will ich diesen Ausgang.

[("HELLO",5),("BYE",3),("GREETINGS",9)] 

Dies ist mein aktueller Code

def wordLengths(myWords): 
    return [i.upper() for i in myWords], [len(i) for i in myWords] 

und dies ist die aktuelle Ausgabe

(['HELLO', 'BYE', 'GREETINGS'], [5, 3, 9]) 
+0

Diese Frage leicht gewesen sein könnte Ich beantworte es, indem ich den Stack-Überlauf kreuzen statt eine neue Frage zu stellen ... Wie auch immer, Sie können [zip] (https://docs.python.org/3/library/functio ns.html # zip) Ihre Return-Anweisung, dh '' 'return zip ([i.upper() für i in myWords], [len (i) für i in myWords])' '', oder mache einen der Vorschläge unten. – dermen

Antwort

4

Sie müssen die beide in einer Liste tun Verständnis:

[(i.upper(), len(i)) for i in myWords] 
2

Ihre Methode gibt ein tu zurück zwei Listen, und was Sie eigentlich tun möchten, ist eine Liste von Tupeln zu erstellen.

Ihr Verständnis würde einfach sein:

[(word.upper(), len(word)) for word in words] 

So können Sie Ihre Methode nun neu geschrieben werden als:

def wordLengths(myWords): 
    return [(word.upper(), len(word)) for word in myWords] 

Demo:

words = ["hello", "bye", "greetings"] 
print(wordLengths(words)) 
# outputs 
# [('HELLO', 5), ('BYE', 3), ('GREETINGS', 9)]