将字符串分成几部分(不按顺序排列)

时间:2018-10-23 14:37:10

标签: python string list

我有一个问题,我想写一个vigenere密码,但似乎无法做到。

string='ihaveanappleinmybag' 
length=3 
#output:
list=['ivnpiyg','healnb','aapema']

我有一个字符串和一个关键字,我想列出一个列表,以便字符串中的每个第1、2、3rd元素都是列表中的一个元素。
该列表取决于关键字,因此如果关键字为4,则它将分为4个部分,每个第1、2、3、4元素都是列表中的元素

3 个答案:

答案 0 :(得分:2)

您可以在此处使用基本切片:

kw = 3
[s[i::kw] for i in range(kw)]

['ivnpiyg', 'healnb', 'aapema']

将其包装在一个简单的函数中即可轻松传递关键字:

def cipher(s, kw):
    return [s[i::kw] for i in range(kw)]

>>> cipher(s, 4)
['iepib', 'hapna', 'anlmg', 'vaey']

>>> cipher(s, 5)
['ialy', 'hneb', 'aaia', 'vpng', 'epm']

答案 1 :(得分:0)

new_list=[]
for i in range(0,length):
    new_list.append(''.join([string[start:start+1] for start in range(i,len(string),length)]))

由@ user3483203标记

new_list=[]
for i in range(0,length):
    new_list.append(string[i::length])

答案 2 :(得分:-1)

您可以zip所需数量的迭代器:

i = iter(string)
list(map(''.join, zip(*zip(*(i for _ in range(length))))))

这将返回:

['ivnpiy', 'healnb', 'aapema']