Разбивая строку на части (не по порядку) - PullRequest
0 голосов
/ 23 октября 2018

У меня проблема, я хотел бы написать надежный шифр, но, похоже, не могу этого сделать.

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

У меня есть строка и ключевое слово, и я хотел бы составить список таким образом, чтобы каждый 1-й, 2-й, 3-й элемент в строке представлял собой один элемент в списке.
Список зависит отключевое слово, поэтому, если ключевое слово будет 4, оно будет разбито на 4 части, причем каждый 1-й, 2-й, 3-й, 4-й элемент является элементом в списке

Ответы [ 3 ]

0 голосов
/ 23 октября 2018
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])
0 голосов
/ 23 октября 2018

Вы можете zip необходимое количество итераторов:

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

Возвращает:

['ivnpiy', 'healnb', 'aapema']
0 голосов
/ 23 октября 2018

Вы можете использовать базовую нарезку здесь:

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...