У меня две струны вроде
string1="abc def ghi"
и
string2="def ghi abc"
Как добиться, чтобы эти две строки были одинаковыми, не нарушая слов?
python
string
python-2.7
string-comparison
пользователь3064366
источник
источник
Ответы:
Кажется, вопрос не в равенстве строк, а в равенстве множеств . Вы можете сравнить их таким образом, только разбив строки и преобразовав их в наборы:
s1 = 'abc def ghi' s2 = 'def ghi abc' set1 = set(s1.split(' ')) set2 = set(s2.split(' ')) print set1 == set2
Результат будет
True
источник
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)
Demomap
, так как вы можете нормализовать регистр строк перед разделениемЕсли вы хотите узнать, равны ли обе строки, вы можете просто сделать
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'
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
источник
Для этого вы можете использовать diffflib по умолчанию в python
from difflib import SequenceMatcher def similar(a, b): return SequenceMatcher(None, a, b).ratio()
затем вызовите аналогичный () как
он вернет сравнение как, ratio> = threshold, чтобы получить результат соответствия
источник
Равенство в прямом сравнении:
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
Если вам просто нужно проверить, совпадают ли две строки,
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'
источник
Я думаю, что 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())
источник
Вы можете использовать простые циклы, чтобы проверить равенство двух строк. Но в идеале вы можете использовать что-то вроде 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
источник