2015-11-03 8 views
8

में एक शब्दकोश का उपयोग कर सबस्ट्रिंग मैं इस स्ट्रिंगस्थानापन्न अजगर

message = '10100010011' 

और इस शब्दकोश

codes = {97: '1', 98: '01', 107: '001', 114: '000'} 

है और मैं इस

[97, 98, 114, 97, 107, 97] 
की तरह कुछ करने के लिए शब्दकोश का उपयोग कर मूल संदेश स्थानापन्न करने की जरूरत है

मैंने अपना रास्ता तय किया, जो काम करता है, लेकिन जब मैं कुछ वास्तविक बड़े तारों का उपयोग करता हूं, तो यह वास्तव में धीमा है। क्या इससे ऐसा करने का कोई तेज तरीका है?

codes = dict(zip(codes.values(), codes.keys())) 
    decoded_mess = [] 
    pom = "" 
    for i in message: 
     pom += i 
     if pom in codes: 
      decoded_mess.append(codes[pom]) 
      pom = "" 

मैं यहाँ उत्तर Easiest way to replace a string using a dictionary of replacements? देखा और मुझे लगता है कि कोशिश की, लेकिन यह मेरे लिए काम नहीं किया। शायद क्योंकि वे पूरे शब्दों से निपट रहे हैं, लेकिन मेरे पास 1s और 0s की 1 लंबी स्ट्रिंग है।

+3

अपने शब्दकोश चारों ओर गलत तरीके से नहीं है? और चाबियाँ (या मान, वर्तमान में) सभी को निश्चित लंबाई नहीं होनी चाहिए? – jonrsharpe

+0

@jonrsharpe वह समाधान में कुंजी-मूल्यों को स्वैप कर रहा है। – Maroun

+0

@MarounMaroun ओह ... तो क्यों अलग से दिखाओ ?! – jonrsharpe

उत्तर

-1

सबसे पहले, codes शब्दकोश को आसान बनाने के लिए पिछड़ा होना चाहिए। मेरी रणनीति एक समय में एक चरित्र को संदेश स्कैन करना है। अगर एक प्रतिस्थापन मिला, तो इसे वापस कर दें। यदि नहीं, तो अगला अक्षर जोड़ें और फिर से देखें। एक प्रतिस्थापन मिलने तक या संदेश समाप्त होने तक ऐसा करना जारी रखें।

def seach_replace(buffer, codes): 
    codes = {v: k for k, v in codes.items()} # Reverse the key, value 
    text_so_far = '' 
    for c in buffer: 
     text_so_far += c 
     if text_so_far in codes: 
      yield codes[text_so_far] 
      text_so_far = '' 
    if text_so_far: 
     yield text_so_far 

if __name__ == '__main__': 
    message = '10100010011' 
    codes = {97: '1', 98: '01', 107: '001', 114: '000'} 
    print(list(seach_replace(message, codes))) 

आउटपुट:

[97, 98, 114, 97, 107, 97] 
+0

ओपी की रणनीति से यह * कोई * अलग कैसे है? जनरेटर का उपयोग करने जैसे अर्थशास्त्र के अलावा? – Shashank

+0

@Shashank: एक जनरेटर एक संचित सूची नहीं बनाकर कम स्मृति का उपयोग करता है। –