要修改函数的Python字符串

2024-09-28 22:23:40 发布

您现在位置:Python中文网/ 问答频道 /正文

有一次我被要求创建一个给定字符串的函数,从字符串中删除一些字符。在

在Python中可以这样做吗?在

可以对列表执行此操作,例如:

def poplist(l):
    l.pop()

l1 = ['a', 'b', 'c', 'd']

poplist(l1)
print l1
>>> ['a', 'b', 'c']

我想要的是对字符串执行这个函数。 我能想到的唯一方法是将字符串转换成一个列表,删除这些字符,然后将其连接回字符串。但我得把结果还给你。 例如:

^{pr2}$

我明白为什么这个功能不起作用。问题更多的是,是否可以用Python实现这一点?如果是的话,我可以不复制字符串吗?在


Tags: 方法函数字符串功能l1列表def字符
3条回答

字符串是不可变的,这意味着你不能改变str对象。当然,您可以构造一个新字符串,它是对旧字符串的一些修改。但是您不能因此更改代码中的s对象。在

解决方法可以是使用容器

class Container:

    def __init__(self,data):
        self.data = data

然后popstring因此得到一个contain,它检查容器,并将其他东西放入其中:

^{pr2}$

但是,您没有更改string对象本身,您只将一个新字符串放入容器中。在

不能在Python中执行call by reference,因此不能调用函数:

foo(x)

然后改变变量x:复制了x的引用,因此不能修改变量{}本身。在

字符串是immutable,因此您唯一的主要选择是通过slicing创建一个new string,并返回{}。在

#removing the last char

>>> s = 'abcd'
>>> s = s[:-1]
=> 'abc'

另一个简单易用的方法可能是使用list,然后使用join中的元素来创建字符串。当然,这一切都取决于你的喜好。在

^{pr2}$

如果您希望删除pos(此处为索引0)给定的某个索引处的字符,则可以slice将字符串改为:

>>> s='abcd'

>>> s = s[:pos] + s[pos+1:]
=> 'abd'

您可以使用bytearray代替:

s1 = bytearray(b'abcd')  # NB: must specify encoding if coming from plain string
s1.pop()     # now, s1 == bytearray(b'abc')
s1.decode()  # returns 'abc'

注意事项

  • 如果您计划过滤任意文本(即非纯ASCII),那么使用bytearray这是一个非常糟糕的想法
  • 在这个并发和并行的时代,使用变异可能是个坏主意

顺便说一下,它可能是XY problem的一个实例。你真的需要把琴弦静音吗?在

相关问题 更多 >