2016-10-02 5 views
-2

Ich habe eine Liste von Listen mit jeweils 11 Zeichenfolgen. Die letzte Zeichenfolge ist ein 8-stelliger Code, bei dem ich die ersten drei Ziffern beibehalten, aber die letzten fünf löschen muss.Wie bearbeite ich eine Zeichenfolge in einer Liste von Listen?

Ich bin mir ziemlich sicher, dass dies mit Indexierung und Slicing getan werden kann. Ein Beispiel Listen mit 5 Einträge statt 11.

Beispiel =

[['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 

Desired_Outcome =

[['a','b','c','d','202'],['e','f','g','h','199'],['i','j','k','l', '156']] 
+3

Es sieht so aus, als ob Sie möchten, dass wir einen Code für Sie schreiben. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben, die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Ausgabe, Rückverfolgung usw.), einzubeziehen. Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [FAQ] (http://stackoverflow.com/tour) und [Wie zu fragen] (http://stackoverflow.com/questions/how-to-ask). – TigerhawkT3

+0

Sie sagen auch, Sie möchten "die ersten drei Ziffern behalten, aber die letzten fünf löschen", und dennoch zeigt Ihr Beispiel, dass die ersten vier Zeichen beibehalten und die letzten vier Zeichen gelöscht werden. – TigerhawkT3

+0

Ich weiß das zu schätzen, aber alles, was ich geschrieben habe, schien einfach so Müll zu sein, dass es nicht wert war, es zu teilen. Wird in Zukunft hinzufügen, danke! – ajbentley

Antwort

0

Sie können eine Zeichenfolge nicht bearbeiten; sie sind unveränderlich.

Aber Sie können die unerwünschten Teile abschneiden, vom letzten Element jedessublist (die eine neue Zeichenfolge erstellt):

lst = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
for sublist in lst: 
    sublist[-1] = sublist[-1][:4] 

print(lst) 
# [['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']] 

Einige Referenzen:

  1. Explain Python's slice notation
  2. Aren't Python strings immutable?
2

können Sie ein nested list comprehension verwenden, um das

>>> l = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
>>> [j[:-1]+[j[-1][:4]] for j in l] 
[['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']] 

Die Idee zu erreichen Hier ist, dass Sie nur die ersten 4 Zeichen im letzten Element greifen.

hier j[:-1] nimmt zuerst alle Elemente der Liste mit Ausnahme der letzten. j[-1] ist das letzte Element und j[-1][:4]] wird die ersten 4 Zeichen des letzten Elements erfassen.

Weitere Informationen zu diesen finden Sie unter What does "list comprehension" mean? How does it work and how can I use it? und Explain Python's slice notation.

1

Sie können es mit einer for-Schleife platzieren bearbeiten und

>>> l = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
>>> for sublist in l: 
...  sublist[4] = sublist[4][:4] 
... 
>>> l 
[['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']] 
>>> 

Hinweis Schneiden: In Ihrem 5-Element kann beispielsweise das letzte Element als sublist[4] oder sublist[-1] indiziert werden (das letzte Element, rückwärts gezählt wird). Beide arbeiten ... aber es ist am besten, während des gesamten Programms konsistent zu sein.

+0

Er sagt, es gibt 11 string in der Liste, aber nur 5 in der Frage, aber es ist die letzte, die wir brauchen, da wir nicht sicher sind, den index ich denke mit 'sublist [-1]' statt 'sublist [4 ] 'ist für die Antwort vorzuziehen. –

+0

@Abhishek - Ja, das ist wahrscheinlich ein guter Weg, um das Problem zu lösen. In einem gut definierten Dataset funktionieren der echte Index und -1 beide gleich gut, also denke ich, dass ich mein Beispiel mit deinem Kommentar notieren werde. – tdelaney

+1

@BhargavRao Ich bleibe dem Beispiel Mann treu! – tdelaney

2

Listenverstehen verwenden.

example = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
desired_outcome = [sublist[:-1] + [sublist[-1][:4]] for sublist in example] 

Und nur um Wissen, ist die Zeichenfolge ein unveränderlich Typ. Es kann nicht bearbeitet werden. Jedes Mal, wenn Sie etwas damit machen, erstellen Sie eine neue Zeichenfolge.

0

Eigentlich ist es sehr einfach, (1) Schleife durch äußere Reihe. (2) Holen Sie sich das letzte Element jedes Sub-Arrays. (3) in Scheiben schneiden x mit [: - 5]

1

Alternativ können Sie auch das gleiche mit map() wie erreichen:

>>> example = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']] 
>>> map(lambda x: x[:3]+[x[4][:-4]], example) 
[['a', 'b', 'c', '2020'], ['e', 'f', 'g', '1997'], ['i', 'j', 'k', '1566']] 

Above Lösung 2.7 auf Python arbeiten. Falls Sie Python 3.x verwenden, müssen Sie explizit einen list() Aufruf map wie hinzuzufügen:

list(map(lambda x: x[:3]+[x[4][:-4]], example)) 

überprüfen Blog auf Lambda, filter, reduce and map zu wissen, wie lambda Funktionen und map() Werke in Python.

+0

Editiert ein wenig, Rollback, wenn Sie das Gefühl haben, dass es unnötig ist. Danke –

+1

@BhargavRao: Es ist in Ordnung, genauer gesagt, was ich sagen wollte :) –

Verwandte Themen