Преобразование строки в список и подсписок с разделением символов в python

Преобразовать строку "Welcome to Baramati" в список & подсписок (например: 1-й список содержит 3 буквы ['W','E','L']. 2-й список содержит 4 буквы ['C','O','M','E'], 3-й список содержит 5 букв, 6-й список содержит 6 букв

Вот одна реализация, использующая itertools.count:

import itertools

s = "Welcome to Baramati"
lst = [c for c in s if c != ' '] # list-ify

cnt = itertools.count(start=3)
output = []
while lst:
    output.append(lst[:(length := next(cnt))])
    lst = lst[length:]

print(output) # [['W', 'e', 'l'], ['c', 'o', 'm', 'e'], ['t', 'o', 'B', 'a', 'r'], ['a', 'm', 'a', 't', 'i']]

Очевидно, что здесь также используется оператор моржа :=, который доступен в python 3.8+.

Кроме того, это может быть немного менее эффективным с точки зрения памяти, поскольку создается временный список. Но мне лично больше нравится использовать шаблон while something: :)

Вы можете использовать функцию генератора и некоторые itertools:

from itertools import count, islice

def chunks(s, start=3):
    i = iter(s.replace(" ", ""))
    for c in count(start):
        if not (chunk := [*islice(i, c)]):
            return  
        yield chunk


[*chunks('Welcome to Baramati')]
# [['W', 'e', 'l'], ['c', 'o', 'm', 'e'], ['t', 'o', 'B', 'a', 'r'], ['a', 'm', 'a', 't', 'i']]

Вы можете сделать это с помощью replace(' ', '') затем только использовать while и получить нарезку того, что вы хотите, как показано ниже:

st = 'Welcome to Baramati'
st = st.replace(' ', '')

i = 0
j = 3
res = []
while i<len(st):
    res.append([s for s in st[i:i+j]])
    i = i+j
    j += 1

print(res)

Выход:

[['W', 'e', 'l'],
 ['c', 'o', 'm', 'e'],
 ['t', 'o', 'B', 'a', 'r'],
 ['a', 'm', 'a', 't', 'i']]
Вернуться на верх