删除字符串中的最后一个字符(Python)

Delete last character in string (Python)

我有一个充满字符串对象的列表。如果字符串对象以 W 结尾,我想从字符串中 delete/remove W。此外,在字符串等于 UW 的唯一情况下,我不想删除 W

我试过这个:

masterAbrevs = []

for subject in masterAbrevs:
    if subject.endswith("W"):
        subject =  subject[:-1]

打印 masterAbrevs 后,我的代码似乎什么也没做。请帮忙。

问题是您从未对列表中的元素进行更改;您正在更改保存从列表 .

返回的元素 的变量

试试这个:

masterAbrevs = ['ASW', 'AS', 'UW']

for i, e in enumerate(masterAbrevs):
    if (e[-1] == 'W') and (e != 'UW'):
        masterAbrevs[i] = masterAbrevs[i][:-1]

# results in ['AS', 'AS', 'UW']

你需要在这里使用enumerate()

masterAbrevs = ['aksdjfW', 'adW', 'UW', 'tttttW']

for ind, subject in enumerate(masterAbrevs):
    if subject.endswith("W") and subject[-2] != 'U':
        masterAbrevs[ind] = subject[:-1]

print masterAbrevs
# ['aksdjf', 'ad', 'UW', 'ttttt']

认为您可能会喜欢更 pythonic 的答案:

masterAbrevs = ['aksdjfW', 'adW', 'UW', 'tttttW']
masterAbrevs = [abrev[:-1] if (abrev.endswith("W") and abrev != "UW") else abrev for abrev in masterAbrevs]

您可能会考虑使用生成器或映射表达式来封装对内部字符串的操作的不同方法:

def rstrip_most_ws(s):
    '''Remove trailing 'W' if s is not 'UW'
    '''
    if s != 'UW' and s[-1] == 'W':
        return s[:-1]
    return s

masterAbrevs = (rstrip_most_ws(s) for s in masterAbrevs)

就地手动更改字符串似乎更有效,但 Python 对生成器和列表表达式进行了优化,因此这种方法可能不会慢很多。