删除尾随字符

Removing trailing characters

我认为下面的这段代码可以删除 a 中每个元素的尾随字符。我无法理解输出

a = ['wonderland@', 'alice,', 'in!$', 'book:']

for index, word in enumerate(a):
    for ch in '@!$,:':
        a[index] = word.strip(ch)
print(a)

>>>['wonderland@', 'alice,', 'in!$', 'book']

推荐:

尝试rstrip这种带有列表理解的方式:

a = ['wonderland@', 'alice,', 'in!$', 'book:']
print([i.rstrip('@!$,:') for i in a])

或尝试regex:

import re
print([re.sub('[@!$,:]+$', '', i) for i in a])

两个代码输出:

['wonderland', 'alice', 'in', 'book']

不推荐:

您的代码不起作用的原因是因为您可能很好地匹配了末尾的字符,但下一次迭代您仍会尝试从原始字符串中删除,而不是您刚刚删除的字符串在之前的迭代中被剥离。您还使用 strip 所以可能只有一个字符会被条纹化,因此您还需要使用 sorted,因此要修复您的代码:

a = ['wonderland@', 'alice,', 'in!$', 'book:']
for index, word in enumerate(a):
    for ch in sorted('@!$,:', key=word.find)[::-1]:
        a[index] = a[index].strip(ch)
        print(a)
print(a)

 

输出:

['wonderland', 'alice', 'in', 'book']

问题是您正在遍历列表并将其分配给 word,然后每次调用 strip 都从未修改的 word 开始。试试这个:

for index in range(len(a)):
    for ch in '@!$,:':
        a[index] = a[index].strip(ch)

事实证明这也不起作用,因为它取决于您要删除的字符的顺序。利用 strip 一次删除多个字符的能力。

for index in range(len(a)):
    a[index] = a[index].strip('@!$,:')