के बीच अंतर मैं एक सूची में बहुत से शब्दों को स्टोर करना चाहता हूं। इनमें से कई शब्द बहुत समान हैं। उदाहरण के लिए मेरे पास afrykanerskojęzyczny
शब्द और afrykanerskojęzycznym
, afrykanerskojęzyczni
, nieafrykanerskojęzyczni
जैसे कई शब्द हैं। दो तारों के बीच अंतर खोजने के लिए प्रभावी (तेज और देने वाला छोटा अंतर आकार) समाधान क्या है और पहले स्ट्रिंग को दूसरी स्ट्रिंग को पुनर्स्थापित करें और diff?पायथन - दो स्ट्रिंग्स
उत्तर
आप regex module (अस्पष्ट अनुभाग) में देख सकते हैं। मैं अगर आप वास्तविक मतभेद प्राप्त कर सकते हैं पता नहीं, लेकिन कम से कम आप डालने की तरह परिवर्तन के विभिन्न प्रकार की अनुमत संख्या निर्दिष्ट कर सकते हैं, हटा सकते हैं और प्रतिस्थापन:
import regex
sequence = 'afrykanerskojezyczny'
queries = [ 'afrykanerskojezycznym', 'afrykanerskojezyczni',
'nieafrykanerskojezyczni' ]
for q in queries:
m = regex.search(r'(%s){e<=2}'%q, sequence)
print 'match' if m else 'nomatch'
धन्यवाद, मैं इसके बारे में पढ़ूंगा। – user2626682
मूल पर ऊपर मेरी टिप्पणी का जवाब प्रश्न मुझे लगता है कि यह सब वह चाहता है बनाता है:
loopnum = 0
word = 'afrykanerskojęzyczny'
wordlist = ['afrykanerskojęzycznym','afrykanerskojęzyczni','nieafrykanerskojęzyczni']
for i in wordlist:
wordlist[loopnum] = word
loopnum += 1
यह निम्न करेगा:
wordlist में हर मूल्य के लिए, मूल कोड को wordlist की है कि मूल्य निर्धारित किया है।
आपको बस इतना करना है कि आपको कोड का यह टुकड़ा डालना है जहां आपको शब्द सूची बदलने की ज़रूरत है, यह सुनिश्चित कर लें कि आप शब्दकोष में बदलने के लिए आवश्यक शब्दों को संग्रहीत करते हैं, और मूल शब्द सही है।
आशा है कि इससे मदद मिलती है!
धन्यवाद, लेकिन असल में मैं 'afiekanerskojęzyczny' की समानता का उपयोग करते हुए, एक स्मृति कुशल तरीके से 'nieafrykanerskojęzyczni' जैसे शब्दों को संग्रहीत करना चाहता हूं। – user2626682
आप ऐसा करने के लिए difflib मॉड्यूल में ndiff का उपयोग कर सकते हैं। इसमें एक स्ट्रिंग को दूसरी स्ट्रिंग में बदलने के लिए आवश्यक सभी जानकारी है।
एक साधारण उदाहरण:
import difflib
cases=[('afrykanerskojęzyczny', 'afrykanerskojęzycznym'),
('afrykanerskojęzyczni', 'nieafrykanerskojęzyczni'),
('afrykanerskojęzycznym', 'afrykanerskojęzyczny'),
('nieafrykanerskojęzyczni', 'afrykanerskojęzyczni'),
('nieafrynerskojęzyczni', 'afrykanerskojzyczni'),
('abcdefg','xac')]
for a,b in cases:
print('{} => {}'.format(a,b))
for i,s in enumerate(difflib.ndiff(a, b)):
if s[0]==' ': continue
elif s[0]=='-':
print(u'Delete "{}" from position {}'.format(s[-1],i))
elif s[0]=='+':
print(u'Add "{}" to position {}'.format(s[-1],i))
print()
प्रिंट:
afrykanerskojęzyczny => afrykanerskojęzycznym
Add "m" to position 20
afrykanerskojęzyczni => nieafrykanerskojęzyczni
Add "n" to position 0
Add "i" to position 1
Add "e" to position 2
afrykanerskojęzycznym => afrykanerskojęzyczny
Delete "m" from position 20
nieafrykanerskojęzyczni => afrykanerskojęzyczni
Delete "n" from position 0
Delete "i" from position 1
Delete "e" from position 2
nieafrynerskojęzyczni => afrykanerskojzyczni
Delete "n" from position 0
Delete "i" from position 1
Delete "e" from position 2
Add "k" to position 7
Add "a" to position 8
Delete "ę" from position 16
abcdefg => xac
Add "x" to position 0
Delete "b" from position 2
Delete "d" from position 4
Delete "e" from position 5
Delete "f" from position 6
Delete "g" from position 7
+1 पायथन में * बहुत * उपयोगी मॉड्यूल हैं। ऐसा लगता है कि मैं हर दिन एक नए बारे में सीखता हूं। – arshajii
यह मैन्युअल रूप से अंतर के माध्यम से कदम उठा रहा है; दो स्ट्रिंग्स के बीच अलग-अलग बहाल करना, [difflib.restore] (http://docs.python.org/2/library/difflib.html#difflib.restore) – dawg
धन्यवाद के साथ बहुत आसान है! लेकिन मुझे यकीन नहीं है कि यह स्मृति कुशल है या नहीं। सूची (difflib.ndiff ("afrykanerskojęzyczny", "nieafrykanerskojęzyczny") ['+ n', '+ i', '+ e', 'a', 'f', 'r', 'y', ' के ',' ए ',' एन ',' ई ',' आर ',' एस ',' के ',' ओ ',' जे ',' ę ',' जेड ',' वाई ',' सी ' , 'z', 'n', 'y'] – user2626682
क्या आप के लिए पूछ रहे हैं संपीड़न के एक विशेष रूप है। xdelta3 इस विशेष प्रकार के संपीड़न के लिए डिज़ाइन किया गया था, और इसके लिए एक अजगर बाध्यकारी है, लेकिन आप शायद ज़्लिब का उपयोग सीधे कर सकते हैं। आप zlib.compressobj
और zlib.decompressobj
का उपयोग zdict
पैरामीटर के साथ अपने "मूल शब्द" पर सेट करना चाहते हैं, उदाहरण के लिए afrykanerskojęzyczny
।
कैविट zdict
केवल पायथन 3.3 और उच्चतर में समर्थित है, और यदि आपके पास अपने सभी diffs के लिए "मूल शब्द" है, तो यह कोड करना सबसे आसान है, जो आप चाहते हैं या नहीं भी हो सकता है।
मैं ndiff जवाब चाहते, लेकिन अगर आप यह सब थूक के लिए एक ही परिवर्तन की सूची में चाहते हैं, आप की तरह कुछ कर सकता है:
import difflib
case_a = 'afrykbnerskojęzyczny'
case_b = 'afrykanerskojęzycznym'
output_list = [li for li in list(difflib.ndiff(a,b)) if li[0] != ' ']
- 1. दो स्ट्रिंग्स
- 2. दो स्ट्रिंग्स
- 3. दो स्ट्रिंग्स
- 4. पायथन: स्ट्रिंग्स
- 5. पायथन स्ट्रिंग्स
- 6. पायथन वृद्धि एक ही समय में दो स्ट्रिंग्स
- 7. पायथन रॉ स्ट्रिंग्स
- 8. दो रेगुलर एक्सप्रेशन विलय स्ट्रिंग्स
- 9. पायथन स्ट्रिंग अक्षर को स्ट्रिंग्स
- 10. परीक्षण करें कि स्ट्रिंग दो स्ट्रिंग्स
- 11. जावास्क्रिप्ट में दो हेक्स स्ट्रिंग्स का एक्सओआर
- 12. दो स्ट्रिंग्स के बीच सभी सामान्य सबस्ट्रिंग्स
- 13. स्ट्रिंग्स
- 14. स्ट्रिंग्स
- 15. डेल्फी: पायथन के रूप में एन्कोडिंग स्ट्रिंग्स
- 16. क्लस्टरिंग ~ 100,000 पायथन में शॉर्ट स्ट्रिंग्स
- 17. पायथन: .. दो delimeters
- 18. पायथन: intertwining दो सूचियों
- 19. स्ट्रिंग्स
- 20. स्ट्रिंग्स
- 21. स्ट्रिंग्स
- 22. स्ट्रिंग्स
- 23. स्ट्रिंग्स
- 24. स्ट्रिंग्स
- 25. स्ट्रिंग्स
- 26. स्ट्रिंग्स
- 27. स्ट्रिंग्स
- 28. स्ट्रिंग्स
- 29. 2 स्ट्रिंग्स
- 30. विभिन्न स्ट्रिंग्स
आप द्वारा ** क्या मतलब है "दूसरी स्ट्रिंग बहाल पहले से और diff "? ** – jrd1
मुझे विश्वास है कि उसका मतलब है" दूसरी स्ट्रिंग को पहले जैसा ही बनाएं "। –
@ एलियासबेनेवेस, बिल्कुल :)। – user2626682