1

我是 Python 的业余爱好者,我编写了一个程序,可以对一长串字符进行编码并输出 6 个字符。

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'

同样,有没有办法为输出的六个字符创建顺序?

这就是我到目前为止所拥有的。我从一个现有的问题中得到了这个。

如何在 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'] 

我对此完全陌生。请帮忙 :)

4

3 回答 3

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].

于 2013-10-15T23:41:47.880 回答
1

python 中的列表是从 开始索引的0,而不是从1。如果您想n使用您显示的方法重新排序 -element 列表,则需要一个包含 numbers 的列表0,1,...,n - 1,因为尝试访问-element 列表nn元素会出错,因为索引将超出预期范围。

例如,用你给的东西,

mylist = ['a','b','c','d','e','f']
myorder = [5,4,3,2,1,0]
mylist = [mylist[i] for i in myorder]
于 2013-10-15T23:39:58.977 回答
1

订单必须是零索引的。这就是python列表的工作方式——第一个元素是mylist[0],第二个元素是mylist[1],等等。因此,它应该是[5,4,3,2,1,0]

于 2013-10-15T23:40:11.950 回答