Reputation: 935
I have a string that has two "0" (str) in it and I want to remove only the "0" (str) at index 4
I have tried calling .replace but obviously that removes all "0", and I cannot find a function that will remove the char at position 4 for me.
Anyone have a hint for me?
Upvotes: 77
Views: 148734
Reputation: 9531
This is my generic solution for any string s
and any index i
:
def remove_at(i: int, s: str) -> str:
return s[:i] + s[i+1:]
Upvotes: 20
Reputation: 337
def remove_char(input_string, index):
first_part = input_string[:index]
second_part = input_string[index+1:]
return first_part + second_part
s = 'aababc'
index = 1
remove_char(s,index)
zero-based indexing
Upvotes: 1
Reputation: 73
rem = lambda x, unwanted : ''.join([ c for i, c in enumerate(x) if i != unwanted])
rem('1230004', 4)
'123004'
Upvotes: 3
Reputation: 9
Try this code:
s = input()
a = int(input())
b = s.replace(s[a],'')
print(b)
Upvotes: 0
Reputation: 1121804
Use slicing, rebuilding the string minus the index you want to remove:
newstr = oldstr[:4] + oldstr[5:]
Upvotes: 112
Reputation: 1426
Another option, using list comprehension and join:
''.join([_str[i] for i in xrange(len(_str)) if i != 4])
Upvotes: 7
Reputation: 142136
Slicing works (and is the preferred approach), but just an alternative if more operations are needed (but then converting to a list wouldn't hurt anyway):
>>> a = '123456789'
>>> b = bytearray(a)
>>> del b[3]
>>> b
bytearray(b'12356789')
>>> str(b)
'12356789'
Upvotes: 6
Reputation: 80346
as a sidenote, replace
doesn't have to move all zeros. If you just want to remove the first specify count
to 1:
'asd0asd0'.replace('0','',1)
Out:
'asdasd0'
Upvotes: 24