Python,无法让索引在我的列表

时间:2018-02-23 10:14:34

标签: python list loops types

我有一个包含下面给出的值的列表:

PC1=list();

PC1=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4]

好的。现在,我有一个字符串,我输入" bitsequence" (好吧,它的一系列字符1和0 ......)来:

print ("The main key entered is: " + KEY)
#test key that I enter: 0001001100110100010101110111100110011011101111001101111111110001

Yepp,这是DES首次准备创建16个子项时的第一步,我试图在这里实现。因此,当使用PC1列表中的项目时,我认为应该选择KEY字符串中的相应字符,我按照以下方式迭代:

KEY_PERM = list();

i=0

for i in range(0,56): 
    print ("index", i, "PC1 ", PC1[i], "value from KEY ", KEY[PC1[i]])
    KEY_PERM.insert(i, KEY[PC1[i]])

mm,此时根据PC1索引填充的KEY_PERM列表应为:11110000110011001010101011110101010101100110011110001111

但......不是,它给了我清单:

['1', '1', '0', '0', '1', '1', '0', '0', '1', '0', '1', '0', '1', '0', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '0', '1', '0', '1', '0', '1', '0', '1', '0', '1', '1', '0', '0', '1', '1', '0', '1', '0', '0', '0']

这是不正确的,例如,KEY字符串中的字符41和33不是0 ....但是1! 11110000110011001010101011110101010101100110011110001111而不是,现在,0和0作为返回的字符。

请帮帮我! Yepp,我是Python的初学者,但想学习。我想字符串中的初始零可能会被错误处理?或者由于我没有正确循环,或其他东西......像错误的类型等,索引运行疯狂。我现在不。

1 个答案:

答案 0 :(得分:1)

我觉得你很困惑33的意思。如果不在编程环境中,那么您将查看列表中的第33个条目,在您的情况下为1。

在Python和许多其他语言中,数组和列表都是索引的,从0开始。所以列表中的第一个条目有索引0.所以当你告诉python key [33]它实际上查找第34个输入您的清单。这是脚本也输出的0。你想要的是列表中的第33个条目。其索引 33-1 = 32 。所以你需要这样做:

for i in range(0,56): 
    print ("index", i, "PC1 ", PC1[i], "value from KEY ", KEY[PC1[i]-1])
    KEY_PERM.insert(i, KEY[PC1[i]-1])
print(''.join(KEY_PERM))
>>> '11110000110011001010101011110101010101100110011110001111'

使用PC1[i]-1中的条目访问PC1[i]时注意KEY

完成测试脚本

PC1=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4]
KEY='0001001100110100010101110111100110011011101111001101111111110001'
KEY_PERM=[]
for i in range(0,56):
    KEY_PERM.insert(i, KEY[PC1[i]-1])
print(''.join(KEY_PERM))

打印:11110000110011001010101011110101010101100110011110001111