从字符串中删除最后一个字符。

772

如何从字符串中删除最后一个字符?

"abcdefghij"  →  "abcdefghi"

19
我认为这不是一个重复问题。在其他问题中,提问者一般地询问子字符串的问题,而这个提问者要求非常具体的子字符串,这通常非常有用。我认为将其放在这里供人搜索和回答是有用的。对于可能想要 1)从一堆路径中去掉尾随的 os 分隔符字符,或者 2)移除 CSV 的每行末尾有空列的最后一个逗号,或者 3)移除句子字符串结尾处的标点符号(任何标点符号)的人来说,这将是很好的选择...【更多示例,无字符】 - bballdave025
2
特别是对于新手来说,从重复链接的答案中找出my_str[:-1]似乎有点困难。就目前而言,(请参见lynx命令),很难找到链接的网站。 $ lynx -dump https://web.archive.org/web/20200826203245/https://dev59.com/_3RB5IYBdhLWcg3wUFrB | grep -n "\[[:][-]1\]" \n 540: print(a[:-1]) \n 542: 在上面的代码中,[:-1] 表示从开头打印到 \n 548: 注意:这里的 [:-1] 与 [0:-1] 和 [0:len(a)-1] 是相同的。 - bballdave025
3
我相信这是 How do I get a substring of a string in Python? 的重复问题。接受的回答展示了如何使用 [:-2] 来移除字符串的最后两个字符。我相信对于任何程序员来说,推断出可以使用 [:-1] 来仅删除最后一个字符应该不会太难。 - mkrieger1
6个回答

1232

简单:

my_str =  "abcdefghij"
my_str = my_str[:-1]

尝试使用以下代码片段将字符串强制转换为列表以更好地理解其工作原理:

str1 = "abcdefghij"
list1 = list(str1)
print(list1)
list2 = list1[:-1]
print(list2)

如果您想要接受用户输入的字符串:

str1 = input("Enter :")
list1 = list(str1)
print(list1)
list2 = list1[:-1]
print(list2)
从一个由空格(如空格)分隔的句子中删除最后一个单词的方法:
str1 = input("Enter :")
list1 = str1.split()
print(list1)
list2 = list1[:-1]
print(list2)

5
是的,st[-1] 只是 st 的最后一个字符。 - Cyrille
7
实际上,即使 st 是空的,那个切片仍然可以使用。它会返回一个空字符串,但你不会收到错误提示。 - kindall
2
如果你有一个单词列表,想要删除每个单词的最后一个字符,该怎么办?例如:[blue, red, green] => [blu,re,gree] ? - Jellyse
12
['蓝', '红', '绿'] - Cyrille
7
浏览这些例子,值得一提的是列表是可变的,并且 list.pop() 方法是处理列表时应该采用的方式,因为它可以在原地以 O(1) 时间删除最后一个元素,而 [:-1] 切片则会在 O(n-1) 的时间内创建一个不包括最后一个元素的列表副本,需要额外的 O(n-1) 空间。 字符串是不可变的 - 没有什么可以补充的。 - Dmitry

56
你试图做的是Python中 字符串切片 的扩展:

假设所有字符串的长度都是10,需要移除最后一个字符:
>>> st[:9]
'abcdefghi'

要删除最后的N个字符:

>>> N = 3
>>> st[:-N]
'abcdefg'

11

对您来说最简单的解决方案是使用字符串切片

Python 2/3:


source[0: -1]  # gets all string but not last char

Python 2:

source = 'ABC'    
result = "{}{}".format({source[0: -1], 'D')
print(result)  # ABD

Python 3:

source = 'ABC'    
result = f"{source[0: -1]}D"
print(result)  # ABD

5

使用切片,可以通过指定startstop索引来提取字符串s的一部分。格式为s[start:stop]。然而,默认情况下start=0,因此我们只需要指定stop即可。


使用stop=3

>>> s = "abcd"
>>> s[:3]
'abc'

使用 stop = -1 从末尾删除一个字符(最佳方法):

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

使用stop = len(s) - 1:
>>> s = "abcd"
>>> s[:len(s) - 1]
'abc'

1
这似乎只是重申了之前的答案。 - tripleee
@tripleee 或许是这样,但唯一写得好的答案是 Anshul Goyal 的,即使那个答案没有直接描述基本切片语法采用 (start:stop) 的形式,这也解决了问题“如何从字符串中删除前 N 个字符?” 对于新手来说,我想 [:-1] 看起来像是未经解释的魔术。最后,这个答案也给出了 :-1 如何对应于 :len(s) - 1 的一些指示。 - Mateen Ulhaq

0

所以有一个名为rstrip()的函数可以处理这种情况。你输入要删除的值,比如在这个例子中是最后一个元素,所以是string[-1]:

string = "AbCdEf" 
newString = string.rstrip(string[-1])
print(newString)

如果您运行此代码,您应该看到“f”值已被删除。
OUTPUT: AbCdE

2
这将从“abcdeff”中删除多个字符。 - tripleee

0
input_str = "abcdefghij"
output_str = ''.join(input_str.rsplit(input_str[-1], 1))
print(output_str)  # Output: "abcdefghi"

在这个方法中,input_str.rsplit(input_str[-1], 1)将字符串在最后一个字符的最后一次出现处分割,得到一个子字符串列表。然后,''.join()将这些子字符串连接成一个不包含最后一个字符的单个字符串。结果字符串存储在output_str中。

如果您想仅删除特定字符的最后一个出现而不是通常情况下删除最后一个字符,则此方法可能很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接