2017-12-26 9 views
1

Ich habe sehr große Zeichenfolgen in meinen Codes. Ich möchte verschiedene Zeichen zwischen den Strings erkennen. Hier ist ein Beispiel, was ich meine:Wie kann ich 2 Zeichenfolgen oder Listen in Python subtrahieren?

a='ababaab' 
b='abaaaaa' 
a=a-b 
print(a) 

Ich erwarte Art wie diese; 'bb' oder '000b00b'

Ich weiß klingt seltsam, aber ich brauche das wirklich.

+0

Sie wollen also alle Zeichen in 'a', die in 'b' an der gleichen Position unterschiedlich sind? – schwobaseggl

Antwort

4

Sie tun können:

a = 'ababaab' 
b = 'abaaaaa' 

a = ''.join(x if x != y else '0' for x, y in zip(a, b)) 
# '000b00b' 
# OR 
a = ''.join(x for x, y in zip(a, b) if x != y) 
# 'bb' 
0

Hier ist das Beispiel: Es funktioniert wih Liste

listA = ["a","b"] 
listB = ["b", "c"] 
listC = [item for item in listB if item not in listA] 
print listC 

Ausgabe

# ['c'] 
0

Sie können benutzerdefinierte Funktion wie folgt erstellen: (Annahme Länge beider Saiten sind gleich)

def str_substract(str1, str2): 
    res = "" 
    for _ in xrange(len(str1)): 
     if str1[_] != str2[_]: 
      res += str1[_] 
     else: 
      res += "0" 
    return res 

a='ababaab' 
b='abaaaaa' 

print str_substract(a, b) 

Ausgang:

000b00b 
+0

Welche Bibliothek hast du für xrange verwendet? –

+0

Warum verwenden Sie ein "_" als Schleifenvariable, wenn es normalerweise für eine * Wegwerfvariable verwendet wird? Außerdem ist dies * extrem * ineffizient, wenn Sie '+ =' mit 'str' Objekten verwenden, erhalten Sie eine quadratische Komplexität. –

+0

@VuralErdogan es ist Python 2 gleichbedeutend mit Python 3 'Bereich' –

0
result = '' 

for temp in a: 
    result += temp if temp not in b else '0' 
+4

Während dieses Code-Snippet kann die Frage lösen, [einschließlich einer Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based -Antworten) hilft wirklich, die Qualität Ihrer Post zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – Isma

0

Verwendung zip:

res = '' 
for i, j in zip(a, b): 
    if i == j: 
     res += '0' 
    else: 
     res += i 

eine Liste Mit dem Ergebnis speichern ist wahrscheinlich effizienter.

0

wenn Sie s1 - s2 wollen:

s1 = 'ababaab' 
    s2 = 'abaaaaa' 



    for i,j in zip(s1,s2): 
     if (i != j): 
      print i, 

Ausgabe: bb

Verwandte Themen