删除尾随字符
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('@!$,:')
我认为下面的这段代码可以删除 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('@!$,:')