Преобразование строки в индекс слайса и присвоение ему значения - PullRequest
0 голосов
/ 10 ноября 2019

Пример:

sb = "Washington"
removecharsDB = [":2","-1:"]

Я хочу удалить часть sb, используя removecharsDB.

Первым делом я создал список sb.

r = list(sb)
r
['W', 'a', 's', 'h', 'i', 'n', 'g', 't', 'o', 'n'] 

Тогда

r[:2] = ""
r[-1:] = ""
"".join(r)

результат: "shingto"

Но я хочу сделать это динамически.

for n in removecharsDB:
   r[eval(n)] = ""

SyntaxError: invalid syntax

for n in removecharsDB:
    r + eval("[" + n + "]") = ""

SyntaxError: can't assign to operator

for n in removecharsDB:
    eval("r[" + n + "]") = ""

SyntaxError: can't assign to function call

Как я могупреобразовать строку в индекс среза?

Ответы [ 2 ]

2 голосов
/ 10 ноября 2019

Вы можете проанализировать строки ":2" и "-1:", чтобы извлечь начало и конец фрагмента. Обратите внимание, что пустое значение в обозначении среза совпадает с None.

В соответствии с запросом в вашем комментарии, если строка "3", мы можем сгенерировать срез [3:4] для замены.

Итак, вы можете сделать:

sb = "Washington"
removecharsDB = [":2","-1:", "3"]

slices = [[int(val) if val else None for val in s.split(':')]
          if ':' in s else [int(s), int(s)+1 or None] for s in removecharsDB]
# print(slices)
# [[None, 2], [-1, None], [3, 4]]

r = list(sb)
for start, stop in slices:
    r[start:stop] = []

print("".join(r))
# shigto
1 голос
/ 10 ноября 2019

С объектом Pyhon * slice:

s = "Washington"
s_lst = list(s)
removechars_lst = [":2","-1:"]

for sl in removechars_lst:
    s_lst[slice(*[int(i) if i else None for i in sl.split(':')])] = ''

print(''.join(s_lst))   # shingto

PS, пожалуйста, следуйте соглашениям Python , именующим (removecharsDB - неверный образец).

...