목록에서 가장 긴 문자열을 선택하는 Python의 가장 효율적인 방법은 무엇입니까?


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()

내가 간과하는 간단하고 우아한 간단한 목록 이해가 있습니까?

답변:


620

로부터 파이썬 문서 자체, 당신은 사용할 수 있습니다 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"대신 반환합니다.
앤더슨 그린

@ 앤더슨 그린 콜 (키)을 충족시키는 목록의 두 가지 요소를 동일하게 캡처하는 방식으로 메소드를 재배치 할 수 있습니까?
David Shaked

이전의 질문에 이어, 나는 첫 번째 항목이 아닌 다른 문제를 해결하는 응답을 연결했습니다 ...
David Shaked

4
모든 가장 큰 요소를 선형 시간으로 얻으려면해야 m=max(map(len,xs)); [x for x in xs if len(x) == m]합니다. 한 줄로 멋지게 할 수 있다고 생각하지 않습니다.
Thomas Ahle

6

가장 긴 문자열이 둘 이상인 경우 ( '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

목록에서 가장 작거나 큰 항목을 얻으려면 내장 min 및 max 함수를 사용하십시오.

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

정렬과 마찬가지로 목록 항목을 비교하기 전에 맵핑하는 데 사용되는 "키"인수를 전달할 수 있습니다.

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

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

문자열에 올바르게 매핑하고 비교로 사용하면 max 함수를 사용할 수있는 것처럼 보입니다. 물론 목록의 각 요소가 아니라 최대 한 번만 찾는 것이 좋습니다.


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.