2013-10-15 1 views
1

저는 아마추어로서 파이썬에 익숙합니다. 나는 긴 문자열을 인코딩하고 6 문자를 출력하는 프로그램을 만들었습니다.36 비트 숫자를 재정렬 하시겠습니까?

def token (n): 
    if n < 10: 
     return chr(ord('0') + (n)) 
    if n in range (10, 36): 
     return chr(ord('A') - 10 + (n)) 
    if n in range (37, 62): 
     return chr(ord('a') - 36 + (n)) 
    if n is 62: 
     return '-' 
    if n is 63: 
     return '+' 

토큰은 숫자 (n)를 문자로 바꿉니다. 대문자와 소문자 "-"와 "+"를 포함합니다.

def encode (n): 
    a = n // 1 % 64 
    b = n // 64 % 64 
    c = n // 64 ** 2 % 64 
    d = n // 64 ** 3 % 64 
    e = n // 64 ** 4 % 64 
    f = n // 64 ** 5 % 64 
    return (token(a) + token(b) + token(c) + token(d) + token(e) + token(f)) 

이것은 나머지 인코딩입니다.

print(encode(1234567890)) 
'IBWb91' 

다시 말하지만, 출력을 위해 6 자의 순서를 만드는 방법이 있습니까?

이것은 내가 지금까지 가지고있는 것입니다. 나는 기존 질문에서 이것을 얻었다.

mylist = ['a','b','c','d','e','f',] 
myorder = [6,5,4,3,2,1] 
mylist = [ mylist[i] for i in myorder] 

How can I reorder a list in python?

하지만 ... 그것이 나에게주는이 :

>>> print(mylist) 
['f','e','d','c','b','a'] 

나는이에 완전히 새로운 오전 : 나는 일이 원하는 것은

IndexError: list index out of range 

. 제발 도와주세요 :)

+0

그냥 목록을 뒤집으려고하거나 더 복잡한 것이 필요합니까? – abarnert

답변

1

목록은 파이썬에서 0부터 시작하여 1에서 색인이 생성됩니다. 표시하는 방법으로 n 요소 목록을 재정렬하려는 경우 숫자가 0,1,...,n - 1 인 목록을 가져야합니다. nn 요소 목록에 액세스하려고 시도하면 색인으로 사용되는 오류가 발생합니다. 예상 된 범위를 벗어난다. 당신이 준 것과 예를 들어

,

mylist = ['a','b','c','d','e','f'] 
myorder = [5,4,3,2,1,0] 
mylist = [mylist[i] for i in myorder] 
1

순서는 제로 인덱스되어야한다. 이것이 파이썬이 어떻게 작동하는지 보여줍니다. 첫 번째 요소는 mylist[0]이고, 두 번째 요소는 mylist[1]입니다. 따라서 [5,4,3,2,1,0]이어야합니다.

2

그냥 목록을 되돌리고 싶은 경우, 단지 reverse 방법 또는 reversed 함수를 호출 : 당신이 인덱스를 사용할 필요가

>>> mylist = ['a','b','c','d','e','f'] 
>>> list(reversed(mylist)) 
['f', 'e', 'd', 'c', 'b', 'a'] 

어려운 방법을 수행 할 경우, 당신이 할 수 있지만,이 실제로 목록에 :

>>> [i for i, e in enumerate(mylist)] 
[0, 1, 2, 3, 4, 5] 

이들은 목록의 색인입니다. 6은 그들 중 하나가 아닙니다. 따라서 mylist[6]을 사용하려고 시도하면 IndexError이 표시됩니다. 당신이 원했던 것은 [5, 4, 3, 2, 1, 0]이었습니다.

관련 문제