파이썬에서 두 문자열을 어떻게 비교합니까?
나는 두 개의 문자열이 있습니다.
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
'programing tip' 카테고리의 다른 글
C ++ 11에서 정수 스레드 ID를 얻는 방법 (0) | 2020.10.19 |
---|---|
각도 지시문 이름 : 소문자 만 허용됩니까? (0) | 2020.10.19 |
HighCharts는 범례에서 시리즈 이름을 숨 깁니다. (0) | 2020.10.18 |
빌드 오류 : 치명적인 오류 : pcre.h : 해당 파일 또는 디렉터리가 없습니다. (0) | 2020.10.18 |
원 로딩 애니메이션 (0) | 2020.10.18 |