Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Как разбить строку несколько раз в python?

#python #python_3x #строки #список


Допустим, у меня есть строка:    message = "Лебедьракщука"

Вместе с этим у меня есть ключ, указывающий на количество символов до каждого пробела:
   key = 634

Как мне создать список:    finally = ['Лебедь', 'рак', 'щука']
    


Ответы

Ответ 1



К примеру так: In [27]: message Out[27]: 'Лебедьракщука' In [28]: key Out[28]: [6, 3, 4] In [29]: def splitWords(word, key): ...: step = 0 ...: result = [] ...: for i in key: ...: result.append(word[step:i+step]) ...: step += i ...: return result ...: In [30]: splitWords(message, key) Out[30]: ['Лебедь', 'рак', 'щука'] По поводу key: Если он в таком формате, делаем так: In [1]: key = 634 In [2]: list(map(int, str(key))) Out[2]: [6, 3, 4]

Ответ 2



Можно воспользоваться RegEx: In [62]: key = 634 In [63]: key = list(map(int, str(key))) In [64]: key Out[64]: [6, 3, 4] import re In [22]: pat = ''.join(['(.{{{}}})'.format(k) for k in key]) In [23]: repl = ' '.join([r'\{}'.format(i) for i in range(1, len(key)+1)]) In [24]: pat Out[24]: '(.{6})(.{3})(.{4})' In [25]: repl Out[25]: '\\1 \\2 \\3' In [26]: re.sub(pat, repl, message) Out[26]: 'Лебедь рак щука' In [27]: re.sub(pat, repl, message).split() Out[27]: ['Лебедь', 'рак', 'щука'] PS но решение от @Alban мне нравится больше... Вот еще одно решение: In [57]: [message[sum(key[:i]) : sum(key[:i+1])] for i in range(len(key))] Out[57]: ['Лебедь', 'рак', 'щука'] Как это работает: In [73]: [print('{} : {}'.format(sum(key[:i]),sum(key[:i+1]))) for i in range(len(key))] 0 : 6 6 : 9 9 : 13

Комментариев нет:

Отправить комментарий