सूची में सबसे लंबी स्ट्रिंग चुनने का सबसे कुशल तरीका पायथन है?


254

मेरे पास परिवर्तनशील लंबाई की एक सूची है और मैं यह जांचने का एक तरीका खोजने की कोशिश कर रहा हूं कि क्या सूची आइटम का वर्तमान में मूल्यांकन किया जा रहा है, सूची में शामिल सबसे लंबा स्ट्रिंग है। और मैं पाइथन 2.6.1 का उपयोग कर रहा हूं

उदाहरण के लिए:

mylist = ['abc','abcdef','abcd']

for each in mylist:
    if condition1:
        do_something()
    elif ___________________: #else if each is the longest string contained in mylist:
        do_something_else()

निश्चित रूप से एक साधारण सूची की समझ है जो छोटी और सुरुचिपूर्ण है जो मैं देख रहा हूँ?

जवाबों:


619

से अजगर प्रलेखन ही, आप उपयोग कर सकते हैं max:

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456

1
अजगर 2.4 के लिए काम नहीं करेगा। देखें इस पोस्ट और इस पोस्ट कोड 2.4 के तहत लागू करने के लिए।
Kumba

13
यह केवल पहला सबसे लंबा स्ट्रिंग लौटाता है: उदाहरण के लिए, print(max(["this", "does", "work"], key=len))केवल सबसे लंबे स्ट्रिंग्स को वापस "this"करने के बजाय केवल लौटाता है ।
एंडरसन ग्रीन

ditto @AndersonGreen। क्या विधि को इस तरह से फिर से तैयार किया जा सकता है जो सूची (कॉल) को पूरा करने वाले सूची के दो + तत्वों को समान रूप से अच्छी तरह से पकड़ लेता है?
डेविड शेख

पहले से मेरे सवाल के बाद, मैंने एक प्रतिक्रिया को जोड़ा है जो पहले-आइटम-अगर-सभी-समान-समान समस्या को दूर करता है ...
डेविड शेन्ड

4
प्रत्येक सबसे बड़े तत्व को प्राप्त करने के लिए, रैखिक समय में, आपको करना होगा m=max(map(len,xs)); [x for x in xs if len(x) == m]। मुझे नहीं लगता कि यह एक पंक्ति में अच्छी तरह से किया जा सकता है।
थॉमस अहले

6

यदि 1 से अधिक सबसे लंबी स्ट्रिंग (सोच '12', और '01') हो तो क्या होना चाहिए?

कोशिश करें कि सबसे लंबा तत्व प्राप्त करें

max_length,longest_element = max([(len(x),x) for x in ('a','b','aa')])

और फिर नियमित रूप से foreach

for st in mylist:
    if len(st)==max_length:...

5
def longestWord(some_list): 
    count = 0    #You set the count to 0
    for i in some_list: # Go through the whole list
        if len(i) > count: #Checking for the longest word(string)
            count = len(i)
            word = i
    return ("the longest string is " + word)

या बहुत आसान:

max(some_list , key = len)

4

किसी सूची में सबसे छोटा या सबसे बड़ा आइटम प्राप्त करने के लिए, अंतर्निहित मिन और अधिकतम कार्यों का उपयोग करें:

lo = min(L)
hi = max(L)

सॉर्ट के साथ, आप एक "कुंजी" तर्क में पास हो सकते हैं जिसका उपयोग सूची के आइटम की तुलना करने से पहले किया जाता है:

lo = min(L, key=int)
hi = max(L, key=int)

http://effbot.org/zone/python-list.htm

लगता है कि आप अधिकतम फ़ंक्शन का उपयोग कर सकते हैं यदि आप इसे स्ट्रिंग के लिए सही ढंग से मैप करते हैं और तुलना के रूप में उपयोग करते हैं। मैं अनुशंसा करूंगा कि सूची में प्रत्येक तत्व के लिए केवल एक बार ही अधिकतम खोजने की सलाह दी जाए।


2

len(each) == max(len(x) for x in myList) या केवल each == max(myList, key=len)


4
क्या आप एक संक्षिप्त विवरण प्रदान कर सकते हैं?
डेविड शेख

1
def LongestEntry(lstName):
  totalEntries = len(lstName)
  currentEntry = 0
  longestLength = 0
  while currentEntry < totalEntries:
    thisEntry = len(str(lstName[currentEntry]))
    if int(thisEntry) > int(longestLength):
      longestLength = thisEntry
      longestEntry = currentEntry
    currentEntry += 1
  return longestLength
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.