重新排列列表中的字母

时间:2014-02-22 02:06:37

标签: python

这可能有点令人困惑,但我想做的是接受任何字符串并根据程序用户的输入重新排列字母。例如,line =“Romeo and Juliet”,key = 3。编码的行将以行[0] R开始,然后将3个字符向下移动到E,然后是A,然后是空格。然后,一旦我到达列表的末尾,它将回绕并以行[1]开始,添加3,依此类推,直到所有字符都被使用。所以最终结果将是“Rea ltoonJim due”。我假设这将使用循环,这是我坚持的部分。这是我目前的代码:

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])

所以我已经设置了列表,这给了我需要的前几个字母,但是我收到了一个错误: IndexError: list index out of range.

所以一旦它到达最后一个角色,我将如何让它循环回split[1]并继续?

2 个答案:

答案 0 :(得分:2)

你可以split[(i*key) % len(split)]围绕列表轮换。在modulo上查看更多内容。

答案 1 :(得分: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'