2017-10-18 3 views

Antwort

7

Sie wollen str.translate verwenden, um eine Übersetzungstabelle von string.maketrans mit (Dies ist str.maketrans in Python 3)

from string import maketrans 

s1 = 'abc' 
s2 = 'def' 
table = maketrans(s1, s2) 
print('backout'.translate(table)) 

Edit:

Bitte beachte, dass wir haben Strings anstelle von Listen als unsere Argumente verwenden, um maketrans.

+0

Ja, das ist eine viel bessere Lösung als meine, gute Arbeit :-) +1 –

0

wir die Schlüssel auf Werte abbilden kann eine zip() mit dict() gewickelt und anschließend die Buchstaben durchlaufen und ordnet sie zu ihren entsprechenden mit sich selbst die Standard sein (falls nicht gefunden):

keys = ['a', 'b', 'c'] 
values = ['d', 'e', 'f'] 
mapper = dict(zip(keys, values)) 
var = 'backout' 
output = "".join([mapper.get(k, k) for k in var]) 
print(output) # edfkout 
0

jeder konvertieren char-Wert auf seine ASCII- map(ord,list1) und tun, um die 1-1-Mapping b/w list1 und list2 Verwendung zip

tbl = dict(zip(map(ord,list1), map(ord,list2))) 
var.translate(tbl) 

Ausgabe mit:

0

Für Leute, die es vorziehen, kürzer, aber kompliziertere Lösung (anstatt die translate() Methode der Verwendung), hier ist es:

list1 = ['a', 'b', 'c'] 
list2 = ['d', 'e', 'f'] 
var = 'backout' 

trans_dict = dict(zip(list1, list2)) 
out_string = ''.join([trans_dict.get(ch, ch) for ch in var]) 

Die Erklärung:

dict(zip(list1, list2)) 

schafft die {'a': 'd', 'b': 'e', 'c': 'f'} Wörterbuch.

trans_dict.get(ch, ch) 

Die 1 st Argument ein Schlüssel ist - wenn es in Schlüssel gefunden wird, erhalten wir seinen Wert: trans_dict[ch]

Das 2 nd Argument ist ein Standardwert - Wird verwendet, wenn das erste Argument in Schlüsseln nicht gefunden wird. Wir erhalten ch.

[trans_dict.get(ch, ch) for ch in var] 

ist eine Liste Verständnis - etwas, als eine Liste von der leeren Liste, Erstellen von nächsten und übernächsten Elemente in der Schleife for anhängt.

''.join(list_of_string) 

ist eine Standardmethode für verketten einzelne Elemente der Liste (in unserem Fall der einzelnen Zeichen).
(Anstelle der leer Zeichenfolge dort eine beliebige Zeichenfolge sein kann - es für die Abgrenzung einzelne Elemente in der verketteten Zeichenfolge verwendet wird)

+0

Ähnliche Antwort wird bereits gegeben von @alfasin – Transhuman

+0

@santhosh - Es ist absolut normal, dass 2 oder mehr Menschen in ihren Antworten gleichzeitig arbeiten, mit unterschiedlichen Geschwindigkeiten, und dass ihre Antworten ähnlich sind, wie sie pythisch und idiomatische Wege wie üblich sind um Aufgaben zu erledigen. Ich bin relativ langsam und wie Sie vielleicht bemerken, ist meine Antwort viel länger. – MarianD

Verwandte Themen