나는 이것이 사소한 것처럼 들리지만 sort()
파이썬 의 기능이 이상 하다는 것을 깨닫지 못했습니다 . 실제로 문자열 형식 인 “숫자”목록이 있으므로 먼저 정수로 변환 한 다음 정렬을 시도합니다.
list1=["1","10","3","22","23","4","2","200"]
for item in list1:
item=int(item)
list1.sort()
print list1
나에게 제공 :
['1', '10', '2', '200', '22', '23', '3', '4']
내가 원하는 것은
['1','2','3','4','10','22','23','200']
숫자 집합 정렬과 관련된 몇 가지 알고리즘을 살펴 봤지만 내가 찾은 알고리즘은 모두 영숫자 집합 정렬과 관련이 있습니다.
나는 이것이 아마도 생각할 수없는 문제라는 것을 알고 있지만 Google과 내 교과서는 .sort()
기능 보다 더 유용하거나 덜 유용한 것을 제공하지 않습니다 .
답변
실제로 문자열을 int로 변환하지 않았습니다. 아니면 그랬지만 그 결과로 아무것도하지 않았습니다. 당신이 원하는 것은 :
list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()
어떤 이유로 int 대신 문자열을 유지해야하는 경우 (일반적으로 나쁜 생각이지만 선행 0 등을 유지해야 할 수도 있음) 키 함수를 사용할 수 있습니다 . 비교하기 전에 각 요소에서 호출되는 함수 인 sort
명명 된 매개 변수 key
를 사용합니다. 목록 요소를 직접 비교하는 대신 키 함수의 반환 값을 비교합니다.
list1 = ["1","10","3","22","23","4","2","200"]
# call int(x) on each element before comparing it
list1.sort(key=int)
답변
당신은에 함수를 전달할 수 key
에 매개 변수 방법 . 이를 통해 시스템은 x 대신 key (x)로 정렬됩니다..sort
list1.sort(key=int)
BTW, 목록을 정수로 영구적으로 변환 하려면 함수를 사용 하십시오.map
list1 = list(map(int, list1)) # you don't need to call list() in Python 2.x
또는 목록 이해
list1 = [int(x) for x in list1]
답변
답변
파이썬의 종류는 이상하지 않습니다. 이 코드는 다음과 같습니다.
for item in list1:
item=int(item)
당신이 생각하는대로 item
하지 않습니다. 목록으로 다시 대체되지 않고 단순히 버려집니다.
어쨌든 올바른 해결책은 key=int
다른 사람들이 보여준대로 사용 하는 것입니다.
답변
다음을 사용할 수도 있습니다.
import re
def sort_human(l):
convert = lambda text: float(text) if text.isdigit() else text
alphanum = lambda key: [convert(c) for c in re.split('([-+]?[0-9]*\.?[0-9]*)', key)]
l.sort(key=alphanum)
return l
이것은 인터넷에서 찾을 수있는 다른 것들과 매우 유사하지만 [abc0.1, abc0.2, ...]
.
답변
어제 같은 문제에 접근하여 문제를 해결하는 [natsort] [1]이라는 모듈을 찾았습니다. 사용하다:
from natsort import natsorted # pip install natsort
# Example list of strings
a = ['1', '10', '2', '3', '11']
[In] sorted(a)
[Out] ['1', '10', '11', '2', '3']
[In] natsorted(a)
[Out] ['1', '2', '3', '10', '11']
# Your array may contain strings
[In] natsorted(['string11', 'string3', 'string1', 'string10', 'string100'])
[Out] ['string1', 'string3', 'string10', 'string11', 'string100']
또한 사전에 대해 sorted
. [1] : https://pypi.org/project/natsort/
답변
Seamus Campbell 의 답변은 python2.x에서 작동하지 않습니다. 기능을
list1 = sorted(list1, key=lambda e: int(e))
사용 lambda
하면 잘 작동합니다.