मेरे पास दो तार हैं जैसे
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
यदि आपको यह जांचने की आवश्यकता है कि क्या दो तार एक समान हैं,
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()
, शायद दो तारों के बीच की दूरी के कुछ बुनियादी मैट्रिक्स की कोशिश करने के लिए उपयोगी हो सकता है।
आप इन या कुछ अन्य मेट्रिक्स से संबंधित हर जगह के उदाहरण पा सकते हैं, फ़ज़ीविज़्ज़ी पैकेज ( https://github.com/seatgeek/fuzzywuzzy ) भी आज़माएं ।
import Levenshtein
import difflib
print(Levenshtein.ratio('String1', 'String2'))
print(difflib.SequenceMatcher(None, 'String1', 'String2').ratio())
आप दो छोरों के बराबर होने की जांच करने के लिए सरल छोरों का उपयोग कर सकते हैं। .लेकिन आदर्श रूप से आप रिटर्न 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