簡體   English   中英

刪除字符串中的最后一個字符(Python)

[英]Delete last character in string (Python)

我有一個充滿字符串對象的列表。 如果字符串對象以W結尾,我想從字符串中刪除/刪除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']

以為您可能會喜歡一個更Python化的答案:

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對生成器和列表表達式進行了優化,因此這種方法可能不會慢很多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM