2012-12-20 14 views
9

मैं एक ऐसा फ़ंक्शन बना रहा था जो किसी सूची से सबसे लंबा स्ट्रिंग मान देता है। मेरा कोड तब काम करता है जब अधिकांश पात्रों के साथ केवल एक स्ट्रिंग होती है। मैंने इसे सबसे लंबे समय तक तारों को प्रिंट करने की कोशिश की, यदि एक से अधिक थे, और मैं नहीं चाहता कि उन्हें दोहराया जाए। जब मैं इसे चलाता हूं, तो यह केवल 'हैलो' देता है, जबकि मैं इसे 'ओमान' और 'योलू' वापस लौटना चाहता हूं। मुझे लगता है कि समस्या if item not list: लाइन में है, लेकिन मैंने सब कुछ करने की कोशिश की है और यह काम नहीं करता है।सूची से सबसे लंबे तार

stringlist = ['hi', 'hello', 'hey','ohman', 'yoloo', 'hello'] 
#maxlength = max([len(s) for s in stringlist]) 
maxlength = max(len(s) for s in stringlist) # omitting the brackets causes max 
              # to operate on an iterable, instead 
              # of first constructing a full list 
              # in memory, which is more efficient 

एक छोटी सी स्पष्टीकरण:

list = ['hi', 'hello', 'hey','ohman', 'yoloo', 'hello'] 
def length(lists): 
    a = 0 
    answer = '' 
    for item in lists: 
     x = len(item) 
    if x > a: 
     a = x 
     answer = item 
    elif x == a: 
     if item not in list: 
      answer = answer + ' ' + item 
    return answer 
print length(list) 

उत्तर

22

पहले, हम सूची में किसी भी स्ट्रिंग की अधिकतम लंबाई पा सकते हैं। इसे list comprehension कहा जाता है, जो आपको एक सूची के रूप में एक सूची को समझने की अनुमति देता है। कोड [len(s) for s in stringlist] का अर्थ है "एक सूची जैसी वस्तु उत्पन्न, stringlist लेने के द्वारा, और कहा कि सूची में हर s के लिए, मुझे के बजाय, len(s) (कि स्ट्रिंग की लंबाई) दे।

तो अब हम एक सूची [2, 5, 3, 5, 5, 5] है। तो फिर ।

longest_strings = [s for s in stringlist if len(s) == maxlength] 
: हम उस पर निर्मित max() समारोह है, जो 5 वापस आ जाएगी फोन

अब आप अधिकतम लंबाई है, आप मूल सूची फ़िल्टर कर सकते 210 यह सिर्फ के रूप में यह अंग्रेजी में पढ़ता है: "। Stringlist में प्रत्येक स्ट्रिंग s के लिए, मुझे, कि स्ट्रिंग s देते हैं len(s)maxlength के बराबर है" यदि आप परिणाम अद्वितीय बनाना चाहते हैं तो

अंत में,, आप set() constuctor का उपयोग एक अद्वितीय सेट उत्पन्न करने के लिए कर सकते हैं: (। हम इसे डुप्लिकेट हटाने के बाद एक सूची में बदलने के लिए वापस list() बुला रहे हैं)

unique_longest_strings = list(set(longest_strings)) 


ml = max(len(s) for s in stringlist) 
result = list(set(s for s in stringlist if len(s) == ml)) 

नोट: ५३६९१३६३२१०

यह करने पर निर्भर करता, list नामक एक चर का उपयोग न करें, क्योंकि यह list प्रकार के लिए नाम का अर्थ ओवरराइड करता है।

+0

मुझे लगता है कि ओपी उन सभी तारों को चाहता है जिनमें अधिकतम लंबाई हो, सभी तारों में अधिकतम लंबाई नहीं। – DSM

+0

@DSM, आह डर्न। मैंने सवाल गलत तरीके से पढ़ा। –

+0

बस अंत में लेन (ओं) == अधिकतम लम्बाई] 'स्ट्रिंगलिस्ट में एस के लिए जोड़ें' और आप सुनहरे –

0

शायद तुम miswrote लाइन if item not in list: है, और मांगपत्र गलत है, के रूप में नीचे संशोधित:

def length(lists): 
    a = 0 
    answer = "" 


    for item in lists: 
     x = len(item) 
     if x > a: 
      a = x 
      answer = item 
     elif x == a: 
      if item not in ans: 
       answer = answer + " " + item 
    return answer 

लेकिन मुझे लगता है जोनाथन रीनहार्ट एक बेहतर तरीका प्रदान की है।

+0

मैंने इसे गलत तरीके से गलत किया। मैं जवाब के बजाय सूचियां डालता हूं। धन्यवाद – fifiman

10

मैं जोनाथन रेनहार्ट के उत्तर का अत्यधिक समर्थन करता हूं, लेकिन मैं इसे पकड़ नहीं पाया ... इस बारे में कैसे?

max(map(len, stringlist)) 

सूची समझ लिखने की कोई आवश्यकता नहीं है, यह भी आसान है ...

+0

धन्यवाद। यह अभी भी एक लाइनर है, और केवल अधिकतम लंबाई भाग के लिए। –

+0

@ जोनाथन रेनहार्ट हां, यही कारण है कि मैंने कहा कि मैं तुम्हारा बहुत समर्थन करता हूं ... मैं सिर्फ कोड के इस विशिष्ट खंड की तुलना करना चाहता था ... पहिया को फिर से शुरू करने की आवश्यकता नहीं है – PALEN

+0

'मानचित्र' के उपयोग को देखना अच्छा लगता है तुलना में, हालांकि। –

0

मुझे एक ही समस्या थी। मैंने इस तरह से अपना समाधान निकाला:

myList =['hi', 'hello', 'hey','ohman', 'yoloo', 'hello'] 
def get_longest_strings(myList): 
     longest=len(max(myList,key=len)) 
     for each in myList: 
       if(longest==len(each)): 
         #common_result is list to store longest string in list 
         common_result.append(each) 
     return common_result 
print(common_result) 
संबंधित मुद्दे