मैं difflib.Differ
के समान तरीके से दो सूचियों को संरेखित करना चाहता हूं, सिवाय इसके कि मैं आइटम की तुलना करने के लिए एक मैच फ़ंक्शन को परिभाषित करने में सक्षम होना चाहता हूं, केवल स्ट्रिंग समानता का उपयोग न करें, और अधिमानतः एक मैच फ़ंक्शन जो एक संख्या वापस कर सकता है 0.0 और 1.0 के बीच, सिर्फ एक बूलियन नहीं।मनमानी मिलान फ़ंक्शन का उपयोग करके पाइथन सूचियों को कैसे अलग/संरेखित करना है?
तो, उदाहरण के लिए, मैं दो सूचियों था:
L1 = [('A', 1), ('B', 3), ('C', 7)]
L2 = ['A', 'b', 'C']
और मैं इस तरह एक मैच समारोह में लिखने के लिए सक्षम होना चाहते हैं:
def match(item1, item2):
if item1[0] == item2:
return 1.0
elif item1[0].lower() == item2.lower():
return 0.5
else:
return 0.0
और उसके बाद है:
d = Differ(match_func=match)
d.compare(L1, L2)
और यह मैच फ़ंक्शन का उपयोग करके भिन्न है। difflib
की तरह, मैं बल्कि एल्गोरिदम ने पूरी तरह से न्यूनतम लेवेनशेटिन दूरी की बजाय अधिक सहज ज्ञान युक्त रत्क्लिफ-ओबर्सहेल्प प्रकार के परिणाम दिए।
यह एक विशेष करने की "लागत" निर्दिष्ट करने के लिए सक्षम किया जा रहा से संबंधित है एल 1 से प्राप्त करने के लिए की जगह एल 2 लेकिन नोटिस प्रत्येक सूची आइटम को एक जटिल संरचना के लिए भी अनुमति देता है, जिसमें से केवल –
तुलना में भूमिका निभा सकता है कि प्राथमिक उद्देश्य यह है कि कौन से आइटम (मोटे तौर पर) मेल खाते हैं और पहचानें कि कौन सी चीजें जोड़ी नहीं हैं ऊपर; इसलिए यह परंपरागत नहीं है "एल 1 से एल 2 तक पहुंचने के लिए कदम" diff –
am क्या मैं मूल रूप से पायथन में सुडलमन-वंसच या स्मिथ-वाटमैन एल्गोरिदम की तरह कुछ ढूंढ रहा हूं? –