跟踪字符串中删除的字符数,python `strip()`

Keeping track of number of characters removed in strings, python `strip()`

我有一对琴弦。在这种情况下,让我们将它们视为分配给唯一变量的两个单独的字符串。这些字符串长度相等:

var1 = 'AnAppleADayKeepsTheDoctorAway'
var2 = '000Ig00000noranceIsBliss00000'

据我所知,从 Python 中的字符串中去除开头和结尾字符的最有效方法是方法 strip():

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

我想从字符串 var1 中删除相同数量的字符,因为它们是 "pair"。在这种情况下,这将删除前三个字符和尾随的五个字符,即

'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方法?

我相信没有这样的方法。因此,对于您的问题,您可能希望找到 var 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]

我会分两步进行:首先,剥正面,然后剥背面。然后你可以计算每边有多少字符被剥离,并使用字符串切片。您可以为此使用 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])

可以分开使用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 中的字符数相同(var2lstrip(..)rstrip(..) 之后)。

于是我们得到:

>>> var1s
'ppleADayKeepsTheDocto'
>>> var2s
'Ig00000noranceIsBliss' 

您可以使用剥离任一侧后的长度变化来创建索引切片

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