파이썬에서 두 문자열을 어떻게 비교합니까?


86

나는 두 개의 문자열이 있습니다.

string1="abc def ghi"

string2="def ghi abc"

이 두 문자열이 단어를 끊지 않고 동일하게 만드는 방법은 무엇입니까?


13
똑같다는 게 무슨 뜻이야? 문자열의 평등에 대한 정의는 무엇입니까?
Theox 2014

41
이 두 문자열 동일 하지 않습니다 . 중요한 주문 문자열입니다.
jonrsharpe 2014

8
문제가 해결되면, 접수 어떠한 답변을 표시하십시오
oxfn

답변:


69

질문은 문자열 평등에 관한 것이 아니라 집합 평등 에 관한 것 같습니다 . 문자열을 분할하고 집합으로 변환하는 방법으로 비교할 수 있습니다 .

s1 = 'abc def ghi'
s2 = 'def ghi abc'
set1 = set(s1.split(' '))
set2 = set(s2.split(' '))
print set1 == set2

결과는

True

1
람다 s1 = 'abc def ghi' s2 = 'def ghi Abc' set1 = set(map(lambda word: word.lower(),s1.split(' '))) set2 = set(map(lambda word: word.lower(),s2.split(' '))) print(set1 == set2) 데모를
Abhijeet

@Abhijeet에 필요가 없습니다 map당신이 분할 전에 문자열 케이스를 정상화 수,
oxfn

57

두 문자열이 같은지 알고 싶다면 간단하게

print string1 == string2

그러나 둘 다 동일한 문자 집합을 가지고 있고 동일한 횟수가 발생하는지 알고 싶다면 다음과 collections.Counter같이 사용할 수 있습니다 .

>>> string1, string2 = "abc def ghi", "def ghi abc"
>>> from collections import Counter
>>> Counter(string1) == Counter(string2)
True

13
>>> s1="abc def ghi"
>>> s2="def ghi abc"
>>> s1 == s2  # For string comparison 
False
>>> sorted(list(s1)) == sorted(list(s2)) # For comparing if they have same characters. 
True
>>> sorted(list(s1))
[' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
>>> sorted(list(s2))
[' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

8

이 같은:

if string1 == string2:
    print 'they are the same'

업데이트 : 각 하위 문자열이 다른 문자열에 존재할 수 있는지 확인하려면 :

elem1 = [x for x in string1.split()]
elem2 = [x for x in string2.split()]

for item in elem1:
    if item in elem2:
        print item

8

이를 위해 파이썬에서 기본 difflib를 사용할 수 있습니다.

from difflib import SequenceMatcher

def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

그런 다음 similar ()를 다음과 같이 호출하십시오.

similar(string1, string2)

일치 결과를 얻기 위해 비교를, ratio> = threshold로 반환합니다.


8

직접 비교의 동등성 :

string1 = "sample"
string2 = "sample"

if string1 == string2 :
    print("Strings are equal with text : ", string1," & " ,string2)
else :
    print ("Strings are not equal")

문자 세트의 동일 :

string1 = 'abc def ghi'
string2 = 'def ghi abc'

set1 = set(string1.split(' '))
set2 = set(string2.split(' '))

print set1 == set2

if string1 == string2 :
    print("Strings are equal with text : ", string1," & " ,string2)
else :
    print ("Strings are not equal")

5

몇 가지 솔루션을 제공 할 예정이며 필요에 맞는 솔루션을 선택할 수 있습니다.

1) 문자에만 관심이 있다면, 즉 동일한 문자와 두 문자열에서 각각 동일한 빈도를 갖는 경우 다음을 사용하십시오.

''.join(sorted(string1)).strip() == ''.join(sorted(string2)).strip()

2) 두 문자열의 공백 (공백 문자) 수에도 관심이 있다면 다음 스 니펫을 사용하면됩니다.

sorted(string1) == sorted(string2)

3) 단어의 순서가 아닌 단어를 고려하고 순서 / 발생에 관계없이 두 문자열의 단어 빈도가 동일한 지 확인하는 경우 다음을 사용할 수 있습니다.

sorted(string1.split()) == sorted(string2.split())

4) 위의 내용을 확장하여 빈도 수에 관심이 없지만 두 문자열에 동일한 단어 집합 이 포함되어 있는지 확인해야하는 경우 다음을 사용할 수 있습니다.

set(string1.split()) == set(string2.split())

세 번째 사용 사례의 경우 사용하는 collection.Counter 것보다 더 분명해 보입니다sorted
Grijesh Chauhan 2019 년

4

두 문자열이 정확히 동일한 지 확인해야하는 경우

text1 = 'apple'

text2 = 'apple'

text1 == text2

결과는

True

일치율이 필요한 경우

import difflib

text1 = 'Since 1958.'

text2 = 'Since 1958'

output = str(int(difflib.SequenceMatcher(None, text1, text2).ratio()*100))

일치 비율 출력은 다음과 같습니다.

'95'

3

나는 difflib가이 일을하기에 좋은 라이브러리라고 생각합니다.

   >>>import difflib 
   >>> diff = difflib.Differ()
   >>> a='he is going home'
   >>> b='he is goes home'
   >>> list(diff.compare(a,b))
     ['  h', '  e', '   ', '  i', '  s', '   ', '  g', '  o', '+ e', '+ s', '- i', '- n', '- g', '   ', '  h', '  o', '  m', '  e']
    >>> list(diff.compare(a.split(),b.split()))
      ['  he', '  is', '- going', '+ goes', '  home']

1

두 파일을 모두 연 다음 단어 내용을 분할하여 비교합니다.

log_file_A='file_A.txt'

log_file_B='file_B.txt'

read_A=open(log_file_A,'r')
read_A=read_A.read()
print read_A

read_B=open(log_file_B,'r')
read_B=read_B.read()
print read_B

File_A_set = set(read_A.split(' '))
File_A_set = set(read_B.split(' '))
print File_A_set == File_B_set

1

정말 간단한 대답을 원한다면 :

s_1 = "abc def ghi"
s_2 = "def ghi abc"
flag = 0
for i in s_1:
    if i not in s_2:
        flag = 1
if flag == 0:
    print("a == b")
else:
    print("a != b")

2
'=='연산자를 사용하는 것은 여기에서 매우 쉽고 정답입니다.
HaseeB Mir

1
@HaSeeBMiR와 = :)!
committedandroider

0

두 문자열을 모두 대문자 또는 소문자로 변환하십시오. 그런 다음 ==비교 연산자를 사용할 수 있습니다 .


0

이것은 매우 기본적인 예이지만 논리적 비교 (==) 또는 string1.lower() == string2.lower(), 두 문자열 사이의 거리에 대한 기본 메트릭 중 일부를 시도하는 데 유용 할 수 있습니다.

이러한 메트릭 또는 다른 메트릭과 관련된 모든 곳에서 예제를 찾을 수 있습니다. fuzzywuzzy 패키지 ( https://github.com/seatgeek/fuzzywuzzy ) 도 사용해보십시오 .

import Levenshtein
import difflib

print(Levenshtein.ratio('String1', 'String2'))
print(difflib.SequenceMatcher(None, 'String1', 'String2').ratio())

-3

간단한 루프를 사용하여 두 문자열이 같은지 확인할 수 있습니다. 그러나 이상적으로는 return s1 == s2와 같은 것을 사용할 수 있습니다.

s1 = 'hello'
s2 = 'hello'

a = []
for ele in s1:
    a.append(ele)
for i in range(len(s2)):
    if a[i]==s2[i]:
        a.pop()
if len(a)>0:
    return False
else:
    return True
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.