第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

循環(huán)“忘記”以刪除某些項(xiàng)目

循環(huán)“忘記”以刪除某些項(xiàng)目

紫衣仙女 2019-06-03 13:57:27
循環(huán)“忘記”以刪除某些項(xiàng)目在這段代碼中,我試圖創(chuàng)建一個(gè)函數(shù)antioowel,它將從字符串中刪除所有元音(AeiouAEIOU)。我覺(jué)得應(yīng)工作正常,但當(dāng)我運(yùn)行它時(shí),樣本文本“嘿,看單詞!”返回為“Hy lk Word!”它“忘記”刪除最后的‘o’。這怎么可能?text = "Hey look Words!"def anti_vowel(text):     textlist = list(text)     for char in textlist:         if char.lower() in 'aeiou':             textlist.remove(char)     return "".join(textlist)print anti_vowel(text)
查看完整描述

3 回答

?
揚(yáng)帆大魚(yú)

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊

您正在修改正在迭代的列表,這必然會(huì)導(dǎo)致一些不直觀的行為。相反,創(chuàng)建列表的副本,這樣就不會(huì)從迭代的內(nèi)容中刪除元素。


for char in textlist[:]: #shallow copy of the list

    # etc

為了澄清你所看到的行為,看看這個(gè)。放print char, textlist在您的(原始)循環(huán)的開(kāi)頭。您可能會(huì)期望,這將垂直地打印出字符串,并在列表旁邊打印出來(lái),但實(shí)際上您將得到以下內(nèi)容:


H ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

e ['H', 'e', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

  ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # !

l ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

o ['H', 'y', ' ', 'l', 'o', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

k ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] # Problem!!

  ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

W ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

o ['H', 'y', ' ', 'l', 'o', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!'] 

d ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

s ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

! ['H', 'y', ' ', 'l', 'k', ' ', 'W', 'o', 'r', 'd', 's', '!']

Hy lk Words!

那怎么回事?好人for x in yPython中的循環(huán)實(shí)際上只是語(yǔ)法糖:它仍然按索引訪問(wèn)List元素。因此,當(dāng)您在迭代列表時(shí)從列表中刪除元素時(shí),您將開(kāi)始跳過(guò)值(如上面所示)。因此,你永遠(yuǎn)看不到第二個(gè)o在……里面"look";跳過(guò)它,因?yàn)楫?dāng)刪除前一個(gè)元素時(shí),索引已經(jīng)“過(guò)去”了。然后,當(dāng)你到達(dá)o在……里面"Words",您將移除第一次出現(xiàn)的'o'就是你以前跳過(guò)的那個(gè)。


正如其他人所提到的,清單理解可能是一種更好(更干凈、更清晰)的方法。利用Python字符串是可迭代的事實(shí):


def remove_vowels(text): # function names should start with verbs! :)

    return ''.join(ch for ch in text if ch.lower() not in 'aeiou')


查看完整回答
反對(duì) 回復(fù) 2019-06-03
?
小怪獸愛(ài)吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

其他答案告訴你為什么for更改列表時(shí)跳過(guò)項(xiàng)。這個(gè)答案告訴您如何在沒(méi)有顯式循環(huán)的情況下刪除字符串中的字符。

使用str.translate():

vowels = 'aeiou'vowels += vowels.upper()text.translate(None, vowels)

這將刪除第二個(gè)參數(shù)中列出的所有字符。

演示:

>>> text = "Hey look Words!">>> vowels = 'aeiou'>>> vowels += vowels.upper()>>> text.translate(None, vowels)'Hy lk Wrds!'
>>> text = 'The Quick Brown Fox Jumps Over The Lazy Fox'>>> text.translate(None, vowels)'Th Qck Brwn Fx Jmps vr Th Lzy Fx'

在Python 3中,str.translate()方法(Python 2:unicode.translate())不同之處在于它不需要缺失體參數(shù);第一個(gè)參數(shù)是將Unicode序數(shù)(整數(shù)值)映射到新值的字典。使用None對(duì)于需要?jiǎng)h除的任何字符:

# Python 3 codevowels = 'aeiou'vowels += vowels.upper()vowels_table = dict.fromkeys(map(ord, vowels))text.translate(vowels_table)

您還可以使用str.maketrans()靜態(tài)法為了繪制這幅地圖:

vowels = 'aeiou'vowels += vowels.upper()text.translate(text.maketrans('', '', vowels))


查看完整回答
反對(duì) 回復(fù) 2019-06-03
  • 3 回答
  • 0 關(guān)注
  • 489 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)