ChatGPT解决这个技术问题 Extra ChatGPT

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

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

"abcdefghij"  →  "abcdefghi"
我不相信这是重复的。在另一个问题中,OP 一般要求一个子字符串。这个 OP 要求一个非常具体的子字符串,这通常非常有用。我相信在这里让人们搜索和回答是有用的。对于可能想要 1) 从一堆路径中删除尾随 os 分隔符或 2) 删除最后一列为空的 CSV 每一行上的最后一个逗号或 3) 删除一个从一堆句子字符串的末尾开始的尾随句点/句号(任何标点符号)...... [更多示例,无字符]
尤其是当一个人是编程新手时,要求一个人从 dup 链接中的答案中找出 my_str[:-1] 似乎有点跳跃。 由于链接的站点现在就出现了(请参阅 lynx 命令),因此很难找到。 $ lynx -dump https://web.archive.org/web/20200826203245/https://stackoverflow.com/questions/663171/how-do-i-get-a-substring-of-a-string-in-python | grep -n "\[[:][-]1\]" \n 540: print(a[:-1]) \n 542: In the above code, [:-1] declares to print from the starting till the \n 548: ` Note: Here a [:-1] is also the same as a [0:-1] and a [0:len(a)-1]
我确实认为这是 How do I get a substring of a string in Python? 的副本。接受的答案显示了如何使用 [:-2] 删除字符串的最后两个字符。我相信任何程序员都应该不难推断出 [:-1] 可以用于仅删除最后一个字符。

H
Hari

简单的:

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)

是的,st[-1] 只是 st 的最后一个字符
实际上,即使 st 为空,该切片仍然有效。好吧,它仍然会返回一个空字符串,但您不会收到错误消息。
如果你有一个单词列表并且你想删除每个单词的最后一个字符怎么办? [蓝、红、绿] => [蓝、绿、绿] ?
[i[:-1] for i in ['blue','red','green']]
查看示例,值得一提的是,列表是可变的,并且 list.pop() 方法是处理列表时要走的路,因为它删除了 O(1) 中的最后一项,而 [:-1] 切片创建了一个副本在 O(n-1) 时间加上 O(n-1) 空间中没有最后一个元素的列表。字符串是不可变的 - 所以没有什么可添加的。
A
Anshul Goyal

您正在尝试做的是 Python 中 string slicing 的扩展:

假设所有字符串的长度为 10,最后一个要删除的字符:

>>> st[:9]
'abcdefghi'

要删除最后 N 个字符:

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

N
Nico

最简单的解决方案是使用 string slicing

蟒蛇 2/3:

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

蟒蛇2:

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

蟒蛇 3:

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

A
Arslanex

所以有一个叫做 rstrip() 的函数来处理这样的事情。您输入要删除的值,在本例中是最后一个元素,因此 string[-1] :

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

如果你运行他的代码,你应该看到'f'值被删除。

OUTPUT: AbCdE

M
Mateen Ulhaq

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

使用 stop = 3

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

使用 stop = -1 从末尾删除 1 个字符(BEST METHOD):

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

使用 stop = len(s) - 1

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