2015-12-08 23 views
5

में एक स्ट्रिंग के सभी एक्सटेंशन निकाल मुझे मिल गया है जैसे पहले) और जीएए के विस्तार के सभी अन्य प्रविष्टियों को खोजने के लिए इसका उपयोग करें (तार जो GAA से शुरू होते हैं और केवल अतिरिक्त अक्षर होते हैं) और उन्हें हटा देते हैं।शब्दकोशों सूची

मुझे पता है कि सूची से वस्तुओं को हटाने के तरीके के बारे में यहां बहुत से प्रश्न पूछे गए हैं, लेकिन इस समस्या के संबंध में कोई भी मेरी मदद नहीं करता है।

+0

रेगेक्स का उपयोग करना बेहतर दृष्टिकोण होगा। – ZdaR

+0

regex मुझे @ZdaR कैसे मदद करेगा? माफ़ कीजिये। मैं यह सब स्वचालित करने की कोशिश कर रहा हूं, इसलिए विभिन्न स्ट्रिंग्स "जीएए", "जीएजी", "जीयूसी" का उपयोग करने के लिए प्रत्येक सूची में 1,2,3 को यह बताएं कि वास्तव में मेरे लिए कोई विकल्प नहीं है – lamazibiji

+0

नियमित रूप से हार्डकोड न करें अभिव्यक्ति, बजाय सूची के पहले तत्व के साथ फ्लाई पर रेगेक्स बनाएं। – ZdaR

उत्तर

4
>>> dictionary={ '1': ['GAA', 'GAAA', 'GAAAA', 'GAAAAA', 'GAAAAAG', 'GAAAAAGU', 
        'GAAAAAGUA', 'GAAAAAGUAU', 'GAAAAAGUAUG', 'GAAAAAGUAUGC', 
        'GAAAAAGUAUGCA', 'GAAAAAGUAUGCAA', 'GAAAAAGUAUGCAAG', 
        'GAAAAAGUAUGCAAGA', 'GAAAAAGUAUGCAAGAA', 'GAAAAAGUAUGCAAGAAC', 
        'RTRSRS','GAG', 'GAGA', 'GAGAG', 'GAGAGA', 'GAGAGAG', 'GAGAGAGA', 
        'GAGAGAGAC', 'GAGAGAGACA', 'GAGAGAGACAU', 'GAGAGAGACAUA', 
        'GAGAGAGACAUAG', 'GAGAGAGACAUAGA', 'GAGAGAGACAUAGAG', 
        'GAGAGAGACAUAGAGG']} 
>>> new_dict = {} 

>>> for i in dictionary: 
     l = len(min(dictionary[i], key=len)) 
     m = [x for x in dictionary[i] if len(x)==l] 
     temp = [] 
     temp.extend(m) 
     for k in dictionary[i]: 
      if not any(map(lambda j: k.startswith(j), m)): 
       temp.append(k) 
     new_dict[i] = temp 

>>> print(new_dict) 
# {'1': ['GAA', 'GAG', 'RTRSRS']} 
+1

धन्यवाद मैंने इसे अपने कोड में जोड़ दिया है, इसलिए यह अपना काम सही करता है, लेकिन ऐसा लगता है कि लगभग 1,000 सबस्ट्रिंग हटा दिए गए हैं, लेकिन वहां हैं अभी भी हजारों और बाएं जिन्हें हटाया नहीं गया था। क्या यह कई 3 अक्षरों के तारों के कारण है जो अन्य अक्षरों से बढ़ाए गए हैं और सूची 1 में केवल एक "GAA" नहीं है? – lamazibiji

+0

आहा! मुझे पता है कि मैं बहुत कुछ पूछ रहा हूं, लेकिन मैं 1 के बजाय इसे एकाधिक बनाने के बारे में कैसे जाउंगा? – lamazibiji

+0

@lamazibiji इसे जांचें, अगर यह अभी भी विफल रहता है, तो क्या आप एक उदाहरण आउटपुट दे सकते हैं? –

2

आपका नमूना डेटा वास्तव में अच्छा नहीं है। अन्य सभी प्रविष्टियां सबसे छोटी स्ट्रिंग से शुरू होती हैं। इसलिए, सभी को हटा दिया जाएगा। यहाँ एक अलग प्रविष्टि के साथ एक छोटा संस्करण:

data = {'1' : ['GAA', 'xxxxxxx', 'GAAA', 'GAAAA', 'GAAAAA'], 
     '2' : ['GAG', 'yyyyyyyy', 'GAGA', 'GAGAG', 'GAGAGA'], 
     '3' : ['GUC', 'zzzzzz', 'GUCU', 'GUCUU', 'GUCUUU']} 

अब:

res = {} 
for key, value in data.items(): 
    shortest = min(value, key=len) 
    res[key] = [entry for entry in value if not entry.startswith(shortest) 
       or entry == shortest] 

>>> res 
{'1': ['GAA', 'xxxxxxx'], '2': ['GAG', 'yyyyyyyy'], '3': ['GUC', 'zzzzzz']} 

नोट: यह भी कम से कम स्ट्रिंग की स्थिति दूसरों कि रहने के लिए रिश्तेदार रहता है। बस इस मामले में।

संबंधित मुद्दे