Python 从列表中重新排列字母
读起来可能有点混乱,但我想做的是根据程序用户的输入,提取任何字符串并重新排列字母。例如,line=“Romeo and Juliet”,key=3。编码行将以第[0]R行开始,然后向下移动3个字符到E,然后是A,然后是空格。然后,当我到达列表的末尾时,它将返回并从第[1]行开始,添加3,依此类推,直到所有字符都被使用。因此,最终结果将是“realtoondue”。我假设这将使用一个循环,而这就是我被卡住的部分。这是我当前的代码:Python 从列表中重新排列字母,python,Python,读起来可能有点混乱,但我想做的是根据程序用户的输入,提取任何字符串并重新排列字母。例如,line=“Romeo and Juliet”,key=3。编码行将以第[0]R行开始,然后向下移动3个字符到E,然后是A,然后是空格。然后,当我到达列表的末尾时,它将返回并从第[1]行开始,添加3,依此类推,直到所有字符都被使用。因此,最终结果将是“realtoondue”。我假设这将使用一个循环,而这就是我被卡住的部分。这是我当前的代码: key = int(input("Enter the key: "
key = int(input("Enter the key: "))
sent = input("Enter a sentence: ")
print()# for turnin
print()
print("With a key of:",key)
print("Original sentence:",sent)
print()
split = list(sent)
for i in range(len(split)):
print(split[0+i*key])
所以我设置了列表,这给了我需要的前几个字母,但我得到了一个错误:
索引器:列表索引超出范围。
因此,一旦它到达最后一个字符,我如何让它返回到split[1]
并继续执行?字符串切片可以采用“跳过”因子,因此:
>>> s = 'Romeo and Juliet'
>>> s[0::3] # every 3rd letter starting from 0
'Rea lt'
>>> s[1::3] # every 3rd letter starting from 1
'oonJi'
将其放在一个循环中,并将它们连接在一起:
>>> ''.join(s[i::3] for i in range(3))
'Rea ltoonJim due'
作为一般功能:
>>> def rearrange(s,skip):
... return ''.join(s[i::skip] for i in range(skip))
...
>>> rearrange(s,3)
'Rea ltoonJim due'
>>> rearrange(s,5)
'R Jtoaumnledio e'
您可以执行split[(i*键)%len(split)]
来围绕列表旋转。多看看