Как разделить строку по два символа в кортеж?

Рейтинг: 1Ответов: 2Опубликовано: 12.04.2023

Если кратко, дана строка some text. Результат нужен типа такой: [('so','me'), (' е', 'ex'), ('t')].

Ранее подсмотрел в интернете и по невнимательности сделал так:

data= 'some text'
step = 2
splitted_data = [tuple(data[i:i+step]) for i in range(0, len(data), step)]

Но результат здесь не тот: [('s', 'o'), ('m', 'e'), (' ', 't'), ('e', 'x'), ('t',)]. Думал со вложенным циклом туда же сделать, но так я не умею

Ответы

▲ 2Принят

Немного дополнив мой предыдущий ответ получим:

data='some text'
pagination = lambda s, n : [ s[i:i+n] for i in (range(0,len(s),n)) ]
N=2
full_list = pagination(data, 2)
splitted_data = [tuple(full_list[n:n+N]) for n in range(0, len(full_list), N)]
print('splitted data:', splitted_data)
Вывод:
[('so', 'me'), (' t', 'ex'), ('t',)]

Как объединить элементы внутри списка здесь.

В одну строчку, конечно, это можно написать, но т.к. нам нужно знать размерность искомого списка, получится слишком муторно.

▲ 0
data= 'some text'
step = 2
splitted_data = []

i=0
for n in range(int(len(data)/step)):
    splitted_data.append (data[i:i+2])
    i+=step
    
print (tuple(splitted_data))

Вывод будет:

('so', 'me', ' t', 'ex')

Если нужно группировать по два результата (по два символа), то можно так:

for n in range(int(len(data)/step/2)):
    splitted_data.append (tuple([data[i:i+2], data[i+2:i+4]]))
    i+=step+2
    
print (splitted_data)

Тогда вывод будет такой:

[('so', 'me'), (' t', 'ex')]

Если потеря последнего символа у которого нет пары является критичной, то можно дописать условие в конце:

if i!=len(data):
    splitted_data.append (tuple([data[i:]]))