Ich möchte veränderbare Listen in eins zusammenführen. Ich benutze Spracherkennung, also ändern sich die Listen der Wörter, die ich bekomme, ständig. Einige Leute sagten, dass sie Listen mit dem Operator + hinzufügen, aber jedes Mal, wenn der Sprecher spricht, werden verschiedene Nummern von Listen generiert. Denken Sie so, als ob das Programm nicht schon weiß, wie viele Listen es jedes Mal geben wird. Ich habe Listen wie ['hi'] und ['hallo'], und das nächste Mal habe ich Listen wie ['one'], ['two'] und ['three']. Ich möchte einen Code oder eine Funktion schreiben, die es erlaubt, alle Nummern von Listen zu einer hinzuzufügen. Daher möchte ich den gleichen Code für alle Nummern von Listen implementieren. Am Ende möchte ich ['hi', 'hallo'] oder ['eins', 'zwei', 'drei'] haben. Ich bin sehr neu in Python. Vielen Dank im Voraus!Wie werden mutierende Nummern von Listen in eine Python-Spracherkennung zusammengeführt?
Antwort
Ich glaube, der +
Operator ist genau das, was Sie wollen. Zum Beispiel:
a = ["foo", "bar"]
b = ["bar", "got"]
c = a + b
druckt ['foo', 'bar', 'bar', 'got']
Wenn Sie b
-a
Verwendung .extend()
hinzufügen möchten. Sie könnten auch +=
verwenden, aber es ist wohl weniger Python.
a = ["foo", "bar"]
b = ["bar", "got"]
a.extend(b) # (or a += b)
print(a)
druckt ["foo", "bar", "bar", "got"]
AKTUALISIERT: mit neuen Informationen aus dem Autor, hier ist meine vierzeilige Lösung:
def merge(lists):
result = []
for list in lists:
result.extend(list)
return result
oder alternativ functools.reduce()
und das operator
Modul:
import functools, operator
def merge(lists):
return functools.reduce(operator.add, lists)
functools.reduce()
einfach macht:
Nehmen Funktion zweier Argumente kumulativ auf die Elemente der Sequenz, von links nach rechts, um die Sequenz auf einen einzelnen Wert zu reduzieren. Zum Beispiel wird reduziert (Lambda x, y: x + y, [1, 2, 3, 4, 5]) berechnet ((((1 + 2) +3) +4) +5). Das linke Argument, x, ist der akkumulierte Wert und das rechte Argument, y, ist der Aktualisierungswert aus der Sequenz.
und operator.add()
ist eine Abkürzung für lambda x, y: x + y
.
Sie sehen, ich möchte einen Code oder eine Funktion erstellen kann eine Vielzahl von Listen nehmen und sie zu einer zusammenführen. In Ihrem Code wissen Sie bereits, dass es nur zwei Listen gibt, aber was ist, wenn Sie die Gesamtzahl der Listen nicht wie bei der Spracherkennung kennen? Vielen Dank! – vick
@vick Ich habe genau das für Sie in meiner aktualisierten Antwort getan! –
@vick poke poke –
Sie haben drei Ansätze Listen fusionieren:
# using +
a = ['A']
b = [1, 2]
a + b # ['A', 1, 2]
# using append
a.append(b) # ['A', [1, 2]]
# using extend
a.extend(b) # ['A', 1, 2]
Was ist der Unterschied zwischen ihnen? +
Der Operator erstellt eine neue Liste, während die Methoden, die Sie aufrufen, mutieren.
Ich entschuldige mich, dass ich nicht erklärt habe, was ich "mutieren" meine. Was ich damit meine ist, dass ich einen Code erstellen möchte, der eine beliebige Anzahl von Listen aufnehmen und zu einem zusammenführen kann. In Ihrem Code wissen Sie bereits, dass es nur zwei Listen gibt, aber was ist, wenn Sie die Gesamtzahl der Listen nicht wie bei der Spracherkennung kennen? Danke für Ihre Hilfe! – vick
"Einige Leute" hatten Recht, verwenden +. Oder erkläre klar, warum + nicht für dich funktioniert. – Julien
Es ist sehr unklar, was Sie fragen, und warum Verkettung Listen mit '+' ist nicht genau das, was Sie wollen. Wenn Sie zu unterschiedlichen Zeiten unterschiedliche Listen erhalten, möchten Sie vermutlich nur jede dieser Zeiten verketten. Haben Sie irgendeinen Code geschrieben, den Sie zeigen können, um Ihre Frage in etwas Konkretes zu verankern? – Blckknght
Mögliches Duplikat von [Anfügen einer Liste an die zweite Liste (Verkettungslisten)] (http: // stackoverflow.com/questions/1720421/how-to-append-liste-to-second-list-concatenate-lists) –