2009-10-03 4 views
7

조용한 토요일 밤에 퍼즐 문제를 해결하고 (wooohoo ... not) sort()로 고민하고 있습니다. 결과는 내가 기대하는 바가 아닙니다. 프로그램은 100 - 999의 모든 조합을 반복하고 제품이 palindome인지 확인합니다. 일치하는 경우 목록에 추가하십시오. 여기에 D를 내 프로그램입니다 : 내가 정렬 된 목록이 필요Python .sort()가 예상대로 작동하지 않습니다.

['101101', '10201', '102201', '102201', '105501', '105501', '106601', '108801', 
'108801', '110011'] 

은 분명히 인덱스 0은 무슨 일이 일어나고 있는지 어떤 생각 1. 다음 큰 : 그물

list = [] #list of numbers 

for x in xrange(100,1000): #loops for first value of combination 
    for y in xrange(x,1000): #and 2nd value 
    mult = x*y 
    reversed = str(mult)[::-1] #reverses the number 
    if (reversed == str(mult)): 
     list.append(reversed) 

list.sort() 
print list[:10] 

? 나는 그것이 후행/선행 0과 관련이 있다는 느낌을 가지고 있지만, 나는 빠른 시각을 보였고 나는 그 문제를 볼 수 없다. 당신은 숫자, 문자열을하지 정렬하는 P

+1

회문 동료 IT 프로젝트 오일러에서의 – whatnick

+2

, 나는 생각합니다. –

+0

@ J S : 빙고 : D –

답변

20

:에서 퍼즐이 오는 곳

보너스 포인트는 당신이 알고있는 경우. '101101' < '10201'이므로 '1' < '2'입니다. list.append(reversed)list.append(int(reversed))으로 변경하면 작동합니다 (또는 다른 정렬 기능 사용).

+6

오, 남자 ... 그냥 내가 멍청이를 졸업했다고 생각했을 때, 신인에게;) 고마워! –

0

숫자가 문자열로 저장되어 있으므로 파이썬이 숫자를 적절히 정렬합니다. 그래서 : '101x'는 '102x'앞에옵니다 ('abcd'가 'az'앞에 올 것과 같은 방식).

0

아니, lexographically 정렬되어 있고 정렬 숫자을 원하는 ... 그래서 "STR()"

+1

별도의 주제에서 프로그램을 최적화 할 수 있습니다. 힌트 : ** 숫자를 생성하십시오 .. – aviraldg

+0

예, 나중에 컴파일 할 수는 있지만 빠르게 진행중인 작업에는 충분히 빠릅니다. –

1

당신은 정렬하고 문자열이 아닌 숫자를 제거 단지, 제대로 정렬됩니다. 문자열은 왼쪽에서 오른쪽으로 비교됩니다.

2

목록에 문자열이 포함되어 있기 때문에 사전 순으로 정렬됩니다. 목록을 정수로 변환 한 다음 정렬을 시도하십시오.

0

비교 연산자는 입력을 정수 대신 문자열로 취급합니다. 문자열 비교 2에서 세 번째 문자는 어휘 1보다 큽니다. reversed = str(mult)[::-1]

11

정렬 작업이 수행 중입니다. 목록에 정수를 저장하려는 경우 Lukáš의 조언을 듣습니다. 또한 제작의 int에 의해, 예를 들어, 정렬하는 방법 일종의 알 수 있습니다 :

list.sort(key=int) 

키 매개 변수는 모든 비교에서 목록 개체의 자리를 차지할 항목을 계산하는 기능을합니다. 정수는 예상대로 수치로 비교됩니다.

이 (그건 그렇고, list 당신이 내장 목록을 우선으로, 정말 나쁜 변수 이름()를 입력하지 않습니다!)

1

int로 변환 할 필요가 있습니다. 멀티 포트가 이미 int이며 당신이 검사 한대로, 그래서 그냥, 역으로이 같은 모양 회문이다

list.append(mult) 
관련 문제