반응형
그런 다음 이름을 '이름'이라는 목록에 저장하고 이름에 포함 된 글자 수, 목록의 시작 부분에 짧은 이름, 끝에 긴 이름을 기준으로 목록을 정렬합니다.
목록을 정렬하기 위해 quicksort를 사용했지만 실행하면 다음 오류가 표시됩니다.
C:\Python27\python.exe C:/Users/Lenovo/Desktop/Anagrams/Main.py
Traceback (most recent call last):
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 25, in <module>
names = quicksort(names)
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
# [.... many lines elided ...]
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 8, in quicksort
greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 7, in quicksort
lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
File "C:/Users/Lenovo/Desktop/Anagrams/Main.py", line 3, in quicksort
if list == []:
RuntimeError: maximum recursion depth exceeded in cmp
빠른 정렬 기능을 테스트했으며 일반 목록 (예 : list = [ 'Alice', 'Bob,'Carl ','Derp '])에서 작동하지만'이름 '을 정렬하려고하면 작동하지 않습니다.
내 코드는 다음과 같습니다.
def quicksort(list):
"""Quicksort using list comprehensions"""
if list == []:
return []
else:
pivot = list[0]
lesser = quicksort([x for x in list[1:] if lessThan(x, pivot)])
greater = quicksort([x for x in list[1:] if not lessThan(x, pivot)])
return lesser + [pivot] + greater
def lessThan(a, b):
return len(a) < len(b)
#'''
input = open('Names.txt', 'r')
output = open('Names Arranged By Length.txt', 'w')
names = []
for line in input:
line = line.translate(None, '\n')
names.append(line)
names = quicksort(names)
for i in names:
print i
output.write(i)
output.write('\n')
print 'Count: ', len(names)
input.close()
output.close()
#'''
내 코드에 어떤 문제가 있으며 어떻게 수정합니까?
해결 방법
단순히 재귀 한계에 도달했습니다. 이름 목록이 Python의 제한된 재귀 기능에 비해 너무 큽니다. Quicksort는 그렇지 않으면 잘 작동합니다.
names = sorted(names, key=len)
이렇게하면 가장 짧은 이름부터 길이별로 이름이 정렬됩니다.
참조 페이지 https://stackoverflow.com/questions/25105541
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python: Convert a string to an integer (0) | 2020.12.11 |
---|---|
파이썬 과학적 표기법을 Float로 변환 (0) | 2020.12.11 |
파이썬 x, y = zip (* zip (a, b))이 파이썬에서 작동하는 이유는 무엇입니까? (0) | 2020.12.11 |
파이썬 ansible에서 사전 병합 (0) | 2020.12.10 |
파이썬 IP 주소가 주어진 대략적인 위치와 시간대를 알려주는 파이썬 라이브러리는 무엇입니까? (0) | 2020.12.10 |
댓글