วิธีที่มีประสิทธิภาพมากที่สุดของ Python ในการเลือกสตริงที่ยาวที่สุดในรายการ?


255

ฉันมีรายการความยาวผันแปรได้และกำลังพยายามหาวิธีทดสอบว่ารายการที่ประเมินอยู่ในปัจจุบันนั้นเป็นสตริงที่ยาวที่สุดที่อยู่ในรายการหรือไม่ และฉันใช้ Python 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()

แน่นอนว่ามีรายการความเข้าใจสั้น ๆ ที่เรียบง่ายและสง่างามที่ฉันมองเห็น?

คำตอบ:


621

จากเอกสารของ Pythonคุณสามารถใช้max:

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

1
จะไม่ทำงานกับ Python 2.4 ดูโพสต์นี้และโพสต์นี้เพื่อรับรหัสที่จะใช้ภายใต้ 2.4
Kumba

13
มันจะส่งกลับสตริงที่ยาวที่สุดแรกprint(max(["this", "does", "work"], key=len))เท่านั้นตัวอย่างเช่นส่งคืน"this"แทนที่จะส่งคืนสตริงที่ยาวที่สุดทั้งหมดเท่านั้น
Anderson Green

ditto @AndersonGreen สามารถนำวิธีการปรับใช้ไปใช้ใหม่ในลักษณะที่จับองค์ประกอบ + สองรายการในรายการประชุมสาย (สำคัญ) ได้ดีเท่ากันหรือไม่
David Shaked

ติดตามคำถามของฉันจากก่อนหน้านี้ผมได้เชื่อมโยงการตอบสนองที่การเยียวยาครั้งแรกที่รายการถ้าทุก-อื่นเท่ากับปัญหา ...
เดวิด Shaked

4
m=max(map(len,xs)); [x for x in xs if len(x) == m]ที่จะได้รับทุกองค์ประกอบที่ใหญ่ที่สุดในเส้นเวลาที่คุณต้องทำ ฉันไม่คิดว่ามันจะทำได้ดีในบรรทัดเดียว
โทมัส Ahle

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
คุณสามารถให้คำอธิบายสั้น ๆ ได้ไหม?
David Shaked

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.