The Question :
483 people think this question is useful
There is a string, for example. EXAMPLE
.
How can I remove the middle character, i.e., M
from it? I don’t need the code. I want to know:
- Do strings in Python end in any special character?
- Which is a better way – shifting everything right to left starting from the middle character OR creation of a new string and not copying the middle character?
The Question Comments :
The Answer 1
675 people think this answer is useful
In Python, strings are immutable, so you have to create a new string. You have a few options of how to create the new string. If you want to remove the ‘M’ wherever it appears:
newstr = oldstr.replace("M", "")
If you want to remove the central character:
midlen = len(oldstr)/2 # //2 in python 3
newstr = oldstr[:midlen] + oldstr[midlen+1:]
You asked if strings end with a special character. No, you are thinking like a C programmer. In Python, strings are stored with their length, so any byte value, including \0
, can appear in a string.
The Answer 2
71 people think this answer is useful
This is probably the best way:
original = "EXAMPLE"
removed = original.replace("M", "")
Don’t worry about shifting characters and such. Most Python code takes place on a much higher level of abstraction.
The Answer 3
68 people think this answer is useful
To replace a specific position:
s = s[:pos] + s[(pos+1):]
To replace a specific character:
s = s.replace('M','')
The Answer 4
30 people think this answer is useful
Strings are immutable. But you can convert them to a list, which is mutable, and then convert the list back to a string after you’ve changed it.
s = "this is a string"
l = list(s) # convert to list
l[1] = "" # "delete" letter h (the item actually still exists but is empty)
l[1:2] = [] # really delete letter h (the item is actually removed from the list)
del(l[1]) # another way to delete it
p = l.index("a") # find position of the letter "a"
del(l[p]) # delete it
s = "".join(l) # convert back to string
You can also create a new string, as others have shown, by taking everything except the character you want from the existing string.
The Answer 5
12 people think this answer is useful
How can I remove the middle character, i.e., M from it?
You can’t, because strings in Python are immutable.
Do strings in Python end in any special character?
No. They are similar to lists of characters; the length of the list defines the length of the string, and no character acts as a terminator.
Which is a better way – shifting everything right to left starting from the middle character OR creation of a new string and not copying the middle character?
You cannot modify the existing string, so you must create a new one containing everything except the middle character.
The Answer 6
11 people think this answer is useful
Use the translate()
method:
>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'
The Answer 7
7 people think this answer is useful
UserString.MutableString
Mutable way:
import UserString
s = UserString.MutableString("EXAMPLE")
>>> type(s)
<type 'str'>
# Delete 'M'
del s[3]
# Turn it for immutable:
s = str(s)
The Answer 8
7 people think this answer is useful
def kill_char(string, n): # n = position of which character you want to remove
begin = string[:n] # from beginning to n (n not included)
end = string[n+1:] # n+1 through end of string
return begin + end
print kill_char("EXAMPLE", 3) # "M" removed
I have seen this somewhere here.
The Answer 9
6 people think this answer is useful
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)
How to remove one character from a string:
Here is an example where there is a stack of cards represented as characters in a string.
One of them is drawn (import random module for the random.choice() function, that picks a random character in the string).
A new string, cardsLeft, is created to hold the remaining cards given by the string function replace() where the last parameter indicates that only one “card” is to be replaced by the empty string…
The Answer 10
3 people think this answer is useful
Here’s what I did to slice out the “M”:
s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]
The Answer 11
3 people think this answer is useful
To delete a char
or a sub-string
once (only the first occurrence):
main_string = main_string.replace(sub_str, replace_with, 1)
NOTE: Here 1
can be replaced with any int
for the number of occurrence you want to replace.
The Answer 12
3 people think this answer is useful
You can simply use list comprehension.
Assume that you have the string: my name is
and you want to remove character m
. use the following code:
"".join([x for x in "my name is" if x is not 'm'])
The Answer 13
2 people think this answer is useful
If you want to delete/ignore characters in a string, and, for instance, you have this string,
“[11:L:0]”
from a web API response or something like that, like a CSV file, let’s say you are using requests
import requests
udid = 123456
url = 'http://webservices.yourserver.com/action/id-' + udid
s = requests.Session()
s.verify = False
resp = s.get(url, stream=True)
content = resp.content
loop and get rid of unwanted chars:
for line in resp.iter_lines():
line = line.replace("[", "")
line = line.replace("]", "")
line = line.replace('"', "")
Optional split, and you will be able to read values individually:
listofvalues = line.split(':')
Now accessing each value is easier:
print listofvalues[0]
print listofvalues[1]
print listofvalues[2]
This will print
11
L
0
The Answer 14
1 people think this answer is useful
Another way is with a function,
Below is a way to remove all vowels from a string, just by calling the function
def disemvowel(s):
return s.translate(None, "aeiouAEIOU")
The Answer 15
0 people think this answer is useful
from random import randint
def shuffle_word(word):
newWord=""
for i in range(0,len(word)):
pos=randint(0,len(word)-1)
newWord += word[pos]
word = word[:pos]+word[pos+1:]
return newWord
word = "Sarajevo"
print(shuffle_word(word))
The Answer 16
-8 people think this answer is useful
Strings are immutable in Python so both your options mean the same thing basically.