我的目标是将两个不同列表(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
答案 0 :(得分:0)
您所描述的跳过项问题是从stringNum
弹出,同时在第三个for循环中迭代它。在此循环的第一次迭代中,element = stringNum[0]
然后在同一循环中从列表中弹出该项。因此,在下一次迭代element = stringNum[1]
中,由于原始列表中的第一项已被删除element
实际上等于来自stringNum[2] >原始列表,在循环开始之前。
下面的代码段是当您从列表左侧弹出并同时迭代它时会发生什么情况的示例:
>>> 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
如果key
和string
的长度相同,就像你的方法描述所暗示的那样,那么你的第三个循环会更像这样,这比弹出更合适从左边开始迭代同一个列表:
for keyVal, strVal in zip(numKey, numString):
encNum.append(keyVal + strVal)
或者您甚至可以将所有三个循环合并为一个:
for keyX, strX in zip(key, string):
keyVal = letters.find(keyX)
strVal = letters.find(strX)
encNum.append(keyVal + strVal)
但是,如果len(key) != len(string)
,这些都不会起作用,那么您的重新实施会需要更多的考虑。