hallo.
habe folgende frage:
ich möchte 2 strings zeichen für zeichen miteinander vergleichen. bei der ersten abweichung soll mir das zeichen, das abweicht,angezeigt werden. kann mir da jemand vielleicht mit einem lösungsansatz weiterhelfen?
danke
strings vergleichen
-
- User
- Beiträge: 6
- Registriert: Montag 1. Juni 2009, 11:06
ok, vielen dank für die hilfe. werde mir das mal anschauen
einfache variante:
verschiedenlange strings bedürfen hier aber noch eines blickes...
Code: Alles auswählen
In [6]: s1 = "Hallo, Welt"
In [7]: s2 = "Hallo, Python"
In [8]: for i, c in enumerate(s1):
...: if c != s2[i]:
...: print "unterschiedliches zeichen: %s an stelle %d" % (c, i)
...:
unterschiedliches zeichen: W an stelle 7
unterschiedliches zeichen: e an stelle 8
unterschiedliches zeichen: l an stelle 9
unterschiedliches zeichen: t an stelle 10
http://www.kinderpornos.info
hangeln nicht, aber dafür muss ich zweimal indizieren und weiss nicht die position. vor allem setze ich aber lieber die geläufigere funktion ein wenn es eh kein grossen unterschied macht.
zip ist hier aber überlegen weil ich keine fehler merh produziere wenn die strings unterschiedlich lang sind. aber das müsste man eh behandeln...
Code: Alles auswählen
In [15]: for pair in zip(s1, s2):
....: if pair[0] != pair[1]:
....: print pair
....:
('W', 'P')
('e', 'y')
('l', 't')
('t', 'h')
http://www.kinderpornos.info
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Naja die Position bekommt man mit einem zwischengeschalteten `enumerate` auch noch:
Code: Alles auswählen
for index, (first, second) in enumerate(izip(s1,s2)):
if first != second:
print "Position {0}: {1} <=> {2}".format(index, first, second)
"enumerate()" funktioniert auch mit dem Rückgabewert von (i)zip, und dank Unpacking kann man sich die Indizierung ganz sparen:
Code: Alles auswählen
for pos, (left, right) in enumerate(zip(s1, s2)):
if left != right:
print('Unterschiedliches Zeichen an Position {0}: {1} != {2}'.format(pos, left, right))