弹出并追加到新列表在python中不起作用

2024-06-16 09:50:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是获得两个不同列表(keyNum和stringNum)的同一索引中的值,并将总和放入新的单独列表(encNum)中。但是,当我运行代码时,它并没有在整个列表中完全运行。 代码如下:

def encrypt(key, string):
    letters = 'abcdefghijklmnopqrstuvwxyz'
    keyNum = []
    stringNum = []
    encNum = []
    for symbol in key:
        numKey = letters.find(symbol)
        keyNum.append(numKey)
    for symbol in string:
        numString = letters.find(symbol)
        stringNum.append(numString)
    for element in stringNum:
        a = keyNum.pop(0)
        b = stringNum.pop(0)
        c = a + b
        encNum.append(c)
        print keyNum
        print stringNum
        print encNum

Tags: key代码in列表forstringfindsymbol
1条回答
网友
1楼 · 发布于 2024-06-16 09:50:23

您所描述的跳过项问题是由于从stringNum弹出的,同时在第三个for循环中迭代它。在这个循环的第一次迭代中,element = stringNum[0],然后在同一个循环中,从列表中弹出该项。因此,在下一个迭代中element = stringNum[1],但是,由于原始列表中的第一个项目已被删除,element实际上等于原始列表中的stringNum[2],在for循环开始之前。在

下面的代码片段是一个示例,说明当您从列表的左侧弹出时,同时对其进行迭代时会发生什么情况:

>>> some_list = [1, 2, 3, 4, 5, 6, 7]
>>> for item in some_list:
...     print('Iterated item: {}'.format(item))
...     print('Popped item:   {}'.format(some_list.pop(0)))
...
Iterated item: 1
Popped item:   1
Iterated item: 3
Popped item:   2
Iterated item: 5
Popped item:   3
Iterated item: 7
Popped item:   4

如果keystring的长度相同,就像您的方法描述所暗示的那样,那么您将在第三个循环中寻找更像这样的内容,这比迭代相同列表时从左侧弹出更合适:

^{pr2}$

或者你甚至可以把这三个循环合并成一个:

for keyX, strX in zip(key, string):
    keyVal = letters.find(keyX)
    strVal = letters.find(strX)
    encNum.append(keyVal + strVal)

但是,如果len(key) != len(string),这两种方法都不起作用,那么您的重新实现将需要更多的思考。在

相关问题 更多 >