我有一对琴弦。在这种情况下,让我们将它们视为分配给唯一变量的两个单独的字符串。这些字符串的长度相等:
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方法?
答案 0 :(得分:2)
我相信没有这种方法。因此,对于您的问题,您将需要查找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]
答案 1 :(得分:2)
我将分两个步骤进行操作:首先,剥离前部,然后剥离后部。然后,您可以计算每侧剥离了多少个字符,并使用字符串切片。您可以为此使用scalaVersion := "2.12.6"
scalacOptions := Seq(
"-language:existentials",
"-language:higherKinds",
"-Ypartial-unification", // EDIT
)
addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.8")
和lstrip()
。示例:
rstrip()
答案 2 :(得分:1)
您可以分别使用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
中的字符数({{1}和var2
之后的lstrip(..)
)。
因此,我们获得:
rstrip(..)
答案 3 :(得分:0)
您可以在剥离任一侧后使用长度变化来创建索引切片
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