나는 두 개의 문자열이 있습니다.
string1="abc def ghi"
과
string2="def ghi abc"
이 두 문자열이 단어를 끊지 않고 동일하게 만드는 방법은 무엇입니까?
나는 두 개의 문자열이 있습니다.
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
map
당신이 분할 전에 문자열 케이스를 정상화 수,
두 문자열이 같은지 알고 싶다면 간단하게
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']
직접 비교의 동등성 :
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())
collection.Counter
것보다 더 분명해 보입니다sorted
나는 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']
두 파일을 모두 연 다음 단어 내용을 분할하여 비교합니다.
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
정말 간단한 대답을 원한다면 :
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")
두 문자열을 모두 대문자 또는 소문자로 변환하십시오. 그런 다음 ==
비교 연산자를 사용할 수 있습니다 .
이것은 매우 기본적인 예이지만 논리적 비교 (==) 또는 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())