我有一个填充字符串对象的列表。如果字符串对象以W
结尾,我想从字符串中删除/删除W
。此外,在字符串等于UW
的唯一情况下,我不想删除W
。
我试过这个:
masterAbrevs = []
for subject in masterAbrevs:
if subject.endswith("W"):
subject = subject[:-1]
打印masterAbrevs
后,我的代码似乎一无所获。请帮助。
答案 0 :(得分:6)
问题是你永远不会对列表中的元素进行更改;您正在对包含从列表返回的元素的变量进行更改。
请改为尝试:
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']
答案 1 :(得分:1)
您需要在此处使用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']
答案 2 :(得分:1)
以为你可能会欣赏更多的pythonic答案:
masterAbrevs = ['aksdjfW', 'adW', 'UW', 'tttttW']
masterAbrevs = [abrev[:-1] if (abrev.endswith("W") and abrev != "UW") else abrev for abrev in masterAbrevs]
答案 3 :(得分:1)
您可以考虑使用生成器或映射表达式将操作封装在内部字符串上的不同方法:
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对发生器和列表表达式进行了优化,因此这种方法可能不会慢得多。