Подтвердить что ты не робот

Как сравнить две строки в python?

У меня есть две строки, такие как

string1="abc def ghi"

и

string2="def ghi abc"

Как получить, что эти две строки одинаковы, не нарушая слов?

4b9b3361

Ответ 1

Кажется, что вопрос не о равенстве строк, а о равенстве устанавливает. Вы можете сравнить их таким образом только путем разбиения строк и преобразования их в множества:

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

Результат будет

True

Ответ 2

Если вы хотите знать, равны ли обе строки, вы можете просто сделать

print string1 == string2

Но если вы хотите знать, имеют ли они оба одинаковый набор символов, и они происходят одинаково много раз, вы можете использовать collections.Counter, как это

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

Ответ 3

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

Ответ 4

Что-то вроде этого:

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

update:, если вы хотите увидеть, может ли каждая подстрока существовать в другой:

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

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

Ответ 5

Равенство при прямом сравнении:

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

Ответ 6

Я собираюсь предоставить несколько решений, и вы можете выбрать тот, который соответствует вашим потребностям:

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

Ответ 7

Для этого вы можете использовать difflib по умолчанию в python

from difflib import SequenceMatcher

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

затем вызовите схожий() как

similar(string1, string2)

он вернет сравнение как, ratio >= threshold, чтобы получить результат соответствия

Ответ 8

Я думаю, что 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']

Ответ 9

открыть оба файла затем сравните их, разделив содержимое своего слова;

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

Ответ 10

Попробуйте скрывать обе строки в верхнем или нижнем регистре. Затем вы можете использовать оператор сравнения ==.

Ответ 11

Если вам нужен действительно простой ответ:

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

Ответ 12

Это довольно простой пример, но после логических сравнений (==) или 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())

Ответ 13

Если вам просто нужно проверить, совпадают ли две строки,

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'