Отслеживание количества символов, удаленных в строках, python `strip ()` - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть пара строк.В этом случае давайте думать о них как о двух отдельных строках, назначенных уникальным переменным.Эти строки имеют одинаковую длину:

var1 = 'AnAppleADayKeepsTheDoctorAway'
var2 = '000Ig00000noranceIsBliss00000'

Самый эффективный из известных мне способов удаления начальных и конечных символов из строки в Python - это метод strip():

print(var2.strip('0'))
'Ig00000noranceIsBliss'

Я бынравится убирать из строки var1 столько же символов, сколько и «пару».В этом случае это будет удалить первые три символа и последние пять символов, то есть

'ppleADayKeepsTheDocto'

Есть ли метод, который позволяет эффективно вырезать символы, как в var1, а затем отслеживатьколичество этих символов, чтобы сделать то же самое для второй строки, var2?Я не уверен, что strip() будет лучшим методом для этой задачи.

РЕДАКТИРОВАТЬ: Очевидно, есть решение.

например,

length_original = len(var2)
num_left_chars = len(var2) - len(var2.lstrip('0'))
num_right_chars = len(var2.rstrip('0'))
edited = var1[num_left_chars:num_right_chars]
print(edited)
## printed
## 'ppleADayKeepsTheDocto'

Я ищу эффективное решение.Если есть более быстрый метод Pythonic?

Ответы [ 4 ]

0 голосов
/ 02 октября 2018

Вы можете создать индексные срезы, используя изменение длины после зачистки с обеих сторон

left = var2.lstrip('0')
start = len(var2) - len(left)

right = var2.rstrip('0')
end = (len(var2) - len(right))

var1 = var1[start: len(var1) - end]
var2 = var2.strip('0')
ppleADayKeepsTheDocto 
Ig00000noranceIsBliss
0 голосов
/ 30 сентября 2018

Я бы сделал это в два этапа: сначала раздеть переднюю часть, а затем раздеть заднюю часть.Затем вы можете посчитать, сколько символов было убрано с каждой стороны, и использовать нарезку строк.Для этого вы можете использовать lstrip() и rstrip().Пример:

var1 = 'AnAppleADayKeepsTheDoctorAway'
var2 = '000Ig00000noranceIsBliss00000'

num_leading = len(var2) - len(var2.lstrip('0'))
num_trailing = len(var2) - len(var2.rstrip('0'))

print(var2.strip())
print(var1[num_leading:-1*num_trailing])
0 голосов
/ 30 сентября 2018

Вы можете использовать lstrip(..) и rstrip(..) по отдельности, и каждый раз считать количество удаленных символов и разделять их на следующие символы:

var1 = 'AnAppleADayKeepsTheDoctorAway'
var2 = '000Ig00000noranceIsBliss00000'

n0 = len(var2)
var3 = var2.lstrip('0')
nl = n0 - len(var3)

var2s = var3.rstrip('0')

var1s = var1[nl:len(var2s)+nl]

Таким образом, мы нарезаем var1s таким образомТаким образом, мы удаляем nl начальных символов (количество символов, которое мы удалили с помощью lstrip(..)), а затем мы гарантируем, что длина равна числу символов в var2s (var2 после обоих lstrip(..)).и rstrip(..)).

Таким образом, получаем:

>>> var1s
'ppleADayKeepsTheDocto'
>>> var2s
'Ig00000noranceIsBliss' 
0 голосов
/ 30 сентября 2018

Я считаю, что такого метода не существует.Таким образом, для вашей проблемы вы бы хотели найти разницу между длиной старого и нового значения переменной 2 следующим образом:

var1 = 'AnAppleADayKeepsTheDoctorAway'
var2 = '000Ig00000noranceIsBliss00000'
old_length = len(var2)
var2 = var2.strip('0')
diff_length = old_length - len(var2)
var1 = var1[diff_length:len(var1)-diff_length]

enter image description here

...