2013-10-15 117 views
1

我是一個業餘的Python,我做了一個程序,將編碼一串長字符並輸出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' 

再次,有沒有辦法來爲六個字符的輸出訂單?

這是我到目前爲止。我從現有的問題中得到了這個。

How can I reorder a list in python?

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

但是......它給了我這樣的:

IndexError: list index out of range 

我希望發生什麼:

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

我完全是新來這個。請幫助:)

+0

你只是想扭轉列表,或者你需要更復雜的東西? – abarnert

回答

1

列表中蟒蛇被索引從01開始,不是。如果要使用顯示的方法重新排序元素列表,則需要包含數字0,1,...,n - 1的列表,因爲嘗試訪問n的元素n - 元素列表將產生 錯誤,因爲索引將超出預期的範圍。

例如,你所付出的,

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

順序必須從零開始索引。這就是python列表的工作原理 - 第一個元素是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]