1
st = 'Lorem ipsum dolor sit amet, consectetur adipis.cing elit. Aliquam sem odio...'
n = []
for i in st:
  n.append(i)
for i in n:
    if i in [',','.']:
        n.remove(i)
string = ''        
for i in n:
    
    string += i
print(string)

input string :

Lorem ipsum dolor sit amet, consectetur adipis.cing elit. Aliquam sem odio...

output :

Lorem ipsum dolor sit amet consectetur adipiscing elit Aliquam sem odio.

expected output :

Lorem ipsum dolor sit amet consectetur adipiscing elit Aliquam sem odio

There is one dot . at the end of the sentence that is not getting removed.

ggorlen
  • 44,755
  • 7
  • 76
  • 106
  • Does this answer your question? [Strange result when removing item from a list while iterating over it](https://stackoverflow.com/questions/6260089/strange-result-when-removing-item-from-a-list-while-iterating-over-it) – ggorlen Apr 26 '21 at 18:58

3 Answers3

0

You can use str.join for the task:

st = "Lorem ipsum dolor sit amet, consectetur adipis.cing elit. Aliquam sem odio..."

print("".join(ch for ch in st if ch not in {*",."}))

Prints:

Lorem ipsum dolor sit amet consectetur adipiscing elit Aliquam sem odio
Andrej Kesely
  • 168,389
  • 15
  • 48
  • 91
0

Calling some_list.remove(something) while iterating over some_list changes the length of list and introduces the potential to skip elements. The solution is to copy the list first. See this thread.

Also, remove() removes the first occurrence, not the current index, so you may get unusual results using it. Best case scenario, iterating over the list repeatedly from the front is harmful to time complexity. I don't find remove() useful often in practice.

I'd write this using a simple regex:

>>> import re
>>> st = 'Lorem ipsum dolor sit amet, consectetur adipis.cing elit. Aliquam sem odio...'
>>> re.sub(r"[.,]", "", st)
'Lorem ipsum dolor sit amet consectetur adipiscing elit Aliquam sem odio'

Other remarks:

  • This is Shlemiel the painter's algorithm:

    for i in n:    
        string += i
    

    Better is "".join(n)

  • n is usually reserved for "number". Prefer lst or L for a generic list.

  • Allocating a list inside a loop adds unnecessary overhead: if i in [',','.']:.

  • The code:

    n = []
    for i in st:
      n.append(i)
    

    can be better expressed as list(st).

ggorlen
  • 44,755
  • 7
  • 76
  • 106
0

How about using replace() for both commas and periods?

>>> st.replace(",", "").replace(".", "")
'Lorem ipsum dolor sit amet consectetur adipiscing elit Aliquam sem odio'
will-hedges
  • 1,254
  • 1
  • 9
  • 18