2013-07-16 30 views
8

Tak, newbious pytanie: Szukam dla najmniejszych (i najpiękniejszych) sposób porównywania dwóch ciągów i jest w stanie wrócić, jako oddzielne ciągi:Python: Get wspólnych znaków z ciągów

  • Wszystko wspólne znaki,
  • Niezwykłe znaki (wszystkie znaki, ale bez wspólnych)
  • Znaki, które są unikalne dla jednego ciągu.

... używanie Pythona (lub Perla, jeśli jest to łatwiejsze, ale najlepiej Python). Przykład:

A = "123 ABC" 
B = "135 AZ" 

thingamajigger(A, B) would give all these: 

intersect = "13 A" (inclues space) 
exclusion = "2BCZ5" 
a_minus_b = "2BC" 
b_minus_a = "5Z" 

a_minus_b jest dość proste ... ale jeśli jeden z tych wymyślnych sposobów jednej liniowej aby wyciągnąć go wyłączyć, to jestem otwarty.

for i in B: 
    A = A.replace(i, "") 

To trochę jak operacje boolowskie na łańcuchach.

(I ogromny bonus do każdego, kto może znaleźć sposób, że zwróci wszystkie wspólne/niestandardowa znaki z dowolnej liczby ciągów jako wejście. To byłoby bardzo przydatne rzeczywiście.)

W każdym razie, dzięki wszystkim!

Odpowiedz

9

Zastosowanie set:

s = set("123 ABC") 
t = set("135 AZ") 
intersect = s & t # or s.intersection(t) 
exclusion = s^t # or s.symmetric_difference(t) 
a_minus_b = s - t # or s.difference(t) 
b_minus_a = t - s # or t.difference(s) 
+0

Wow ... oczywiście ... i wtedy można po prostu użyć "". Połącz (ustaw), aby zgnieść go na sznurku! Dzięki. – Jollywatt

+0

@Joseph: To * jest * piękne, prawda? :-) – jason

+0

Jedyne cienie są, zestawy zawierają tylko unikalne elementy. Powiedzmy, że chciałem odjąć _ "!" _ Od _ "Hello!" _. Użycie _set ("Hello!") - set ("!") _ Dałoby _ "Helo" _. Ale użycie alternatywnego _a_minus_b_ powyżej działa. :) – Jollywatt

-3
String1="xyzabc" #String 
String2="pqrstuv" #Another String 

String1set=set(String1) #need to convert it into set. 
String2set=set(String2) 
String3=String1set^String2set #^for uncommon values 
String3=String1set&String2set # & for common values 
print(String3) 

Powód, dlaczego użyliśmy ustawić tutaj ->https://www.python-course.eu/sets_frozensets.php

+1

Jak dokładnie to powoduje dodanie czegoś nowego do drugiej odpowiedzi? – usr2564301

+0

Prawdopodobnie wyjaśnienie zwykłym przykładem pomogłoby komuś. Im więcej przejdziesz przez odpowiedzi, tym więcej się nauczysz. –

+0

Dziękujemy za ten fragment kodu, który może zapewnić krótkoterminową pomoc w ograniczonym zakresie. Właściwe wyjaśnienie znacznie poprawi (// meta.stackexchange.com/q/114762) jego długoterminową wartość, pokazując * dlaczego * jest to dobre rozwiązanie problemu i sprawiłoby, że byłby bardziej przydatny dla przyszłych czytelników z inne, podobne pytania. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienia, w tym założenia, które podjąłeś. –

Powiązane problemy