programing tip

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

itbloger 2020. 10. 19. 07:47
반응형

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


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

string1="abc def ghi"

string2="def ghi abc"

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


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

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

결과는

True

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

print string1 == string2

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

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

>>> 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']

이 같은:

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

직접 비교의 동등성 :

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")

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

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())

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

from difflib import SequenceMatcher

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

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

similar(string1, string2)

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


나는 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']

open both of the files then compare them by splitting its word contents;

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

Try to covert both strings to upper or lower case. Then you can use == comparison operator.


If you want a really simple answer:

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")

This is a pretty basic example, but after the logical comparisons (==) or string1.lower() == string2.lower(), maybe can be useful to try some of the basic metrics of distances between two strings.

You can find examples everywhere related to these or some other metrics, try also the fuzzywuzzy package (https://github.com/seatgeek/fuzzywuzzy).

import Levenshtein
import difflib

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

If you just need to check if the two strings are exactly same,

text1 = 'apple'

text2 = 'apple'

text1 == text2

The result will be

True

If you need the matching percentage,

import difflib

text1 = 'Since 1958.'

text2 = 'Since 1958'

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

Matching percentage output will be,

'95'

참고URL : https://stackoverflow.com/questions/21903842/how-do-i-compare-two-strings-in-python

반응형