我有一个问题,我想写一个vigenere密码,但似乎无法做到。
string='ihaveanappleinmybag'
length=3
#output:
list=['ivnpiyg','healnb','aapema']
我有一个字符串和一个关键字,我想列出一个列表,以便字符串中的每个第1、2、3rd元素都是列表中的一个元素。
该列表取决于关键字,因此如果关键字为4,则它将分为4个部分,每个第1、2、3、4元素都是列表中的元素
答案 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']