program story

결과를 소문자로 구분하지 않고 대소 문자를 구분하지 않는 목록 정렬?

inputbox 2020. 8. 5. 08:13
반응형

결과를 소문자로 구분하지 않고 대소 문자를 구분하지 않는 목록 정렬?


다음과 같은 문자열 목록이 있습니다.

['Aden', 'abel']

대소 문자를 구분하지 않고 항목을 정렬하고 싶습니다. 그래서 나는 얻고 싶다 :

['abel', 'Aden']

그러나 대문자가 소문자 앞에 나타나기 때문에 sorted()or 와 반대입니다 list.sort().

사건을 어떻게 무시할 수 있습니까? 모든 목록 항목을 소문자로 묶는 솔루션을 보았지만 목록 항목의 대소 문자를 변경하고 싶지 않습니다.


Python 3.3 이상에는 대소 문자를 구분하지 않도록 str.casefold특별히 설계된 메소드가 있습니다.

sorted_list = sorted(unsorted_list, key=str.casefold)

Python 2에서는 lower()다음을 사용하십시오 .

sorted_list = sorted(unsorted_list, key=lambda s: s.lower())

둘 다 lower메소드를 가지고 있기 때문에 일반 및 유니 코드 문자열 모두에서 작동합니다 .

Python 2에서는 두 유형의 값을 서로 비교할 수 있기 때문에 일반 및 유니 코드 문자열의 혼합에서 작동합니다. 파이썬 3은 그렇게 작동하지 않습니다 : 바이트 문자열과 유니 코드 문자열을 비교할 수 없으므로 파이썬 3에서는 제정신을하고 한 유형의 문자열 목록 만 정렬해야합니다.

>>> lst = ['Aden', u'abe1']
>>> sorted(lst)
['Aden', u'abe1']
>>> sorted(lst, key=lambda s: s.lower())
[u'abe1', 'Aden']

>>> x = ['Aden', 'abel']
>>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode
['abel', 'Aden']

파이썬 3에서는 str유니 코드는하지만, 파이썬 2에서 당신은 모두 작동이 더 일반적인 접근 사용할 수 있습니다 strunicode:

>>> sorted(x, key=lambda s: s.lower())
['abel', 'Aden']

당신은 또한 이것을 시도 할 수 있습니다 :

>>> x = ['Aden', 'abel']
>>> x.sort(key=lambda y: y.lower())
>>> x
['abel', 'Aden']

python3에서 사용할 수 있습니다

list1.sort(key=lambda x: x.lower()) #Case In-sensitive             
list1.sort() #Case Sensitive

이것은 Python 3에서 작동하며 결과를 소문자로 묶지 않습니다 (!).

values.sort(key=str.lower)

파이썬 3.3에서 이런 식으로했습니다 :

 def sortCaseIns(lst):
    lst2 = [[x for x in range(0, 2)] for y in range(0, len(lst))]
    for i in range(0, len(lst)):
        lst2[i][0] = lst[i].lower()
        lst2[i][1] = lst[i]
    lst2.sort()
    for i in range(0, len(lst)):
        lst[i] = lst2[i][1]

그런 다음이 함수를 호출 할 수 있습니다.

sortCaseIns(yourListToSort)

이 시도

def cSort(inlist, minisort=True):
    sortlist = []
    newlist = []
    sortdict = {}
    for entry in inlist:
        try:
            lentry = entry.lower()
        except AttributeError:
            sortlist.append(lentry)
        else:
            try:
                sortdict[lentry].append(entry)
            except KeyError:
                sortdict[lentry] = [entry]
                sortlist.append(lentry)

    sortlist.sort()
    for entry in sortlist:
        try:
            thislist = sortdict[entry]
            if minisort: thislist.sort()
            newlist = newlist + thislist
        except KeyError:
            newlist.append(entry)
    return newlist

lst = ['Aden', 'abel']
print cSort(lst)

산출

['abel', 'Aden']

참고 URL : https://stackoverflow.com/questions/10269701/case-insensitive-list-sorting-without-lowercasing-the-result

반응형