Нарезка строки со списком в качестве входных данных - PullRequest
0 голосов
/ 23 марта 2019

У меня есть список:

my_list = [6, 9, 12]

У меня есть строка:

my_string = "The quick brown fox jumps over the lazy dog."

Я хочу разрезать строку следующим образом:

my_string[:6]
my_string[6:9]
my_string[9:12]
my_string[12:]

Уведомлениечто диапазон фрагментов - это элементы my_list.

Вывод:

The qu
ick
 br
own fox jumps over the lazy dog.

Или в список.Но я борюсь с алгоритмом, который делает нарезку.

Ответы [ 5 ]

2 голосов
/ 23 марта 2019

Мое решение

L=[0]+my_list+[len(my_string)]
for a in range(len(L)-1):
    print(my_string[L[a]:L[a+1]])
2 голосов
/ 23 марта 2019

Используйте zip и нарезка. Измените ваш my_list, добавив 0 в начале до применения zip и срез:

my_list = [6, 9, 12]
my_string = "The quick brown fox jumps over the lazy dog."

my_list = [0] + my_list
for x, y in zip(my_list, my_list[1:]):
    print(my_string[x: y])

print(my_string[my_list[-1]:])

# The qu
# ick                                                          
# br                                                         
# own fox jumps over the lazy dog.

Вернее, если вам нужно, чтобы по какой-то причине my_list не изменился, используйте здесь отдельную переменную: my_list1 = [0] + my_list и for x, y in zip(my_list1, my_list1[1:]):.

1 голос
/ 23 марта 2019
my_list = [6, 9, 12]
my_string = "The quick brown fox jumps over the lazy dog."
start = 0
for end in my_list:
    print(my_string[start:end])
    start = end
print(my_string[end:])

работал для меня ...

0 голосов
/ 23 марта 2019

Вы можете написать функцию, которая возвращает генератор, который будет использоваться там, где вам нужно представить результат.

def slice_string_by(my_string, my_list):
  memo = 0
  for idx in my_list:
    size = idx - memo
    chunck = my_string[0:size]
    yield chunck
    my_string = my_string[size:]
    memo = idx
  yield my_string


Тогда вы можете просто позвонить:
res = slice_string_by(my_string, my_list)

В результате получается генератор, преобразующий в список, который вы получите:

list(res) #=> ['The qu', 'ick', ' br', 'own fox jumps over the lazy dog.']


Или вы можете просто перебрать его, чтобы напечатать элементы:
for chunk in slice_string_by(my_string, my_list):
  print(chunk)

# The qu
# ick
#  br
# own fox jumps over the lazy dog.
0 голосов
/ 23 марта 2019

Это работало в соответствии с требуемым выводом

my_list = [6, 9, 12]

my_string = "The quick brown fox jumps over the lazy dog."

resultstring = ''

temp = 0

for i in range(0,len(my_list)):
    resultstring+=my_string[temp:my_list[i]]
    resultstring+='\n'
    temp = my_list[i]

resultstring+=my_string[temp:]

print resultstring

Вывод:

The qu
ick
 br
own fox jumps over the lazy dog.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...