簡體   English   中英

如何循環遍歷字符串並逐個刪除字符

[英]How can I cycle through a string and remove character one by one

提供了一個數字和一個詞。 例如:

value = 3
word = 'NAME'

我必須遍歷單詞NAME並一次刪除一個字母,最后顯示剩余的最后一個字母。 移除的模式是:從第一個字母開始,循環遍歷value字母(一旦到達末尾,從索引0開始)並移除到達的字母。

例如,如果值為3 它將從N開始計數3並刪除第一個M

剩下的是NAE - 從現在是E的下一個字母開始計數到3 ,然后A將被刪除。

剩余的是NE - 計數到3 ,從E開始,然后E將被刪除,只剩下N 結果將顯示為N 我無法找到一種方法來構建循環來執行此迭代。

到目前為止,我已經手動完成並使它像

if value == 4:
  print('A')
elif value == 1:
  print('E')
elif value ==2:
  print('N')

這是不切實際的,因為該值將是1-100之間的任何值。 這將自動迭代和刪除並向我顯示最后一個字母的任何其他解決方案。

您實際上無法從字符串中“刪除”字符,因為字符串是不可變的。 可以做的是使用修改后的字符串重新分配。

至於循環,您可以將% (模數)運算符用於循環效果。 首先,您需要在每次迭代時標記要計數的第一個索引:

start = 0

然后我們將要繼續迭代,直到只剩下一個字母:

while len(word) > 1:

現在我們要找到下一個要刪除的字母的索引。 正如我所說,使用% ,我們將在最后一個字母后返回0

    to_remove = (start + value - 1) % len(word)

現在我們需要真正刪除找到的字母,正如我所解釋的,我們必須重新分配變量,我們將通過使用切片來刪除字母:

    word = word[:to_remove] + word[to_remove+1:]

總之,我們有類似的東西:

def remove_letters(word, value):
    start = 0
    while len(word) > 1:
        to_remove = (start + value - 1) % len(word)
        start = to_remove
        word = word[:to_remove] + word[to_remove+1:]
    return word

幾個例子:

>>> remove_letters('NAME', 3)
'N'
>>> remove_letters('NAME', 4)
'A'
>>> remove_letters('NAME', 5)
'A'

暫無
暫無

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

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