629
votes

Let's say my string is 10 characters long.

How do I remove the last character?

If my string is "abcdefghij" (I do not want to replace the 'j' character, since my string may contain multiple 'j' characters) I only want the last character gone. Regardless of what it is or how many times it occurs, I need to remove the last character from my string.

4
I don't believe this to be a duplicate. In the other question, the OP asked for a substring in general. This OP asks for a very specific substring which is often very useful. I believe having this here for people to search AND for people to answer is useful. It would be nice for someone who may want 1) to take off a trailing os separator character from a bunch of paths or 2) to remove a last comma on each line of a CSV which has an empty last column or 3) to remove a trailing period/full stop (any punctuation) from the end of a bunch of sentence strings ... [more examples, no chars] - bballdave025
Especially when one is new to programming, asking one to figure out the my_str[:-1] from the answers in the dup link seems a bit of a jump. As the linked site appears RIGHT NOW (see the lynx command), it's hard to find. $ lynx -dump https://web.archive.org/web/20200826203245/https://stackguides.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] - bballdave025

4 Answers

1038
votes

Simple:

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

Try the following code snippet to better understand how it works by casting the string as a list:

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

In case, you want to accept the string from the user:

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

To make it take away the last word from a sentence (with words separated by whitespace like space):

str1 = input("Enter :")
list1 = str1.split()
print(list1)
list2 = list1[:-1]
print(list2)
45
votes

What you are trying to do is an extension of string slicing in Python:

Say all strings are of length 10, last char to be removed:

>>> st[:9]
'abcdefghi'

To remove last N characters:

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

The siemples solution for you is using string slicing.

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
-1
votes

This should actally work:

string = string[0:len(string) - 2]