到达列表末尾后返回开头,python

Once the end of a list is reached go back to the beginning, python

我有包含所有字母的列表“alphabet”,程序应该使用给用户的数字生成一个字母序列,例如:

Word input = "sun"
Shift_number input = 3
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

输出应该是“vxq”,因为索引向右移动了三个空格,我的问题是索引的移动超过了列表中变量的数量,例如:

Word input = "zero"
Shift_number = 1

输出应为“afsp”,但我却收到此错误:“列表索引超出范围”。我只需要索引从“z”到“a”

取模以保持在数组边界内(index % 26,返回大小为 26 的字母表数组中 0-25 之间的范围):

>>> "".join([alphabet[(alphabet.index(i) + 3) % 26] for i in "sun"])
'vxq'
>>> "".join([alphabet[(alphabet.index(i) + 1) % 26] for i in "zero"])
'afsp'

(alphabet.index(i) + N) % 26 将在数组中循环增加索引 N

使用itertools.cyclestring.ascii_lowercase:

from itertools import cycle
import string
circular_alphabet = cycle(string.ascii_lowercase)
"".join(next(circular_alphabet ) for _ in range(50))
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx'