Нужна матрица такая, чтобы количество символов в каждом элементе не превышало 5К - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть список строк list1 = ['There', 'are two', 'goats on the bridge']

Мне нужно найти способ, чтобы каждый раз, когда было не более 10 символовв строке.если так, я должен сломать это.

list2 = [«Там», «два», «козлы на», «мост»].Так что это должно быть около или около 10, в некоторой степени, что будет делать readlines.

Спасибо -Megha

1 Ответ

0 голосов
/ 20 сентября 2019

Далее просто разбивает каждый элемент на подэлементов не более k = 10 символов :

k = 10
[x[i:i+k] for x in list1 for i in range(0, len(x), k)]

Результат:

['There', 'are two', 'goats on t', 'he bridge']



Если вы хотите разделить пробелы на k = 10 плюс / минус t = 2 символа , вам потребуется немного более сложный подход:
from functools import reduce
import operator

def split_about_k(s, k=10, t=1):
    """split s at spaces into k +/- t sized subtsrings"""
    i = 0
    while i < len(s)-k:
        j = s.rfind(' ', i+k-t, i+k+t)
        if j < 0:
            yield s[i:i+k]
            i = i + k
        else:
            yield s[i:j]
            i = j + 1
    yield s[i:]


reduce(operator.concat, [list(split_about_k(x, 10, 2)) for x in list1])

Результат:

['There', 'are two', 'goats on', 'the bridge']
...