0

I have a list of punctuation that I want the loop to remove from a user inputted sentence, and it seems to ignore multiple punctuation in a row?

punctuation = ['(', ')', '?', ':', ';', ',', '.', '!', '/', '"', "'"]
usr_str=input('Type in a line of text: ')

#Convert to list
usr_list= list(usr_str)

#Checks if each item in list is punctuation, and removes ones that are
for char in usr_list:
    if char in punctuation:
        usr_list.remove(char)

#Prints resulting string
print(''.join(usr_list))

Now this works for:

This is an example string, which works fine!

Which prints:

This is an example string which works fine

However, something like this:

Testing!!!!, )

Gives:

Testing!!

Thanks in advance for the help!

4

2 に答える 2

2

リストを繰り返し処理しているにリストを変更しています。決して良い考えではありません。

それを機能させる 1 つの方法は、リストのコピーを反復処理することです。

for char in usr_list[:]:  # this is the only part that changed; add [:] to make a copy
    if char in punctuation:
        usr_list.remove(char)

経験を積むと、代わりに「リスト内包表記」を使用することになるでしょう。

usr_list = [char for char in usr_list if char not in punctuation]

filter()または正規表現または...を使用して、おそらく他の答えが得られるでしょう。しかし、最初はシンプルにしておいてください:-)

もう 1 つの方法は、2 つの異なるリストを作成することです。入力リストが であるとしinput_listます。それで:

no_punc = []
for char in usr_list:
    if char not in punctuation:
        no_punc.append(char)

また、この方法でも入力リストを使用する必要はまったくないことに注意してください。代わりに直接反復することができますusr_str

于 2013-10-18T02:24:45.303 に答える
2

str.translateこれは、次のメソッドを使用して実行できます。

In [10]: 'Testing!!!!, )'.translate(str.maketrans('', '', string.punctuation))
Out[10]: 'Testing '
于 2013-10-18T02:26:28.173 に答える