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

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

遍歷列表并使用 remove() 不會產(chǎn)生預(yù)期的結(jié)果

遍歷列表并使用 remove() 不會產(chǎn)生預(yù)期的結(jié)果

慕容3067478 2023-03-08 14:38:48
我是一名編程新手,希望獲得一些幫助來理解為什么以下算法以特定方式運(yùn)行。我的目標(biāo)是讓函數(shù)讀取包含單詞(可以大寫)的文本文件,去除空格,將項(xiàng)目拆分為單獨(dú)的行,將所有首字母大寫的字符轉(zhuǎn)換為小寫,刪除所有單個(gè)字符(例如,“a”, “b”、“c”等),并將生成的單詞添加到列表中。所有單詞都將成為列表中的單獨(dú)項(xiàng)目以供進(jìn)一步處理。輸入文件:文本文件('sample.txt')包含以下數(shù)據(jù) - “a apple b Banana c cherry”期望的輸出:['apple', 'banana', 'cherry']在我最初的嘗試中,我嘗試遍歷單詞列表以測試它們的長度是否等于 1。如果是,則該單詞將從列表中刪除,而其他單詞則保留在列表中。這導(dǎo)致了以下非預(yù)期的輸出:[None, None, None]filename = ‘sample.txt’with open(filename) as input_file:    word_list = input_file.read().strip().split(' ')    word_list = [word.lower() for word in word_list]    word_list = [word_list.remove(word) for word in word_list if len(word) == 1]print(word_list)產(chǎn)生的非預(yù)期輸出 = [None, None, None]我的下一個(gè)嘗試是遍歷單詞列表以測試它們的長度是否大于 1。如果是,則將單詞添加到列表中(留下單個(gè)字符)。使用此方法實(shí)現(xiàn)了所需的輸出。filename = ‘sample.txt’with open(filename) as input_file:    word_list = input_file.read().strip().split(' ')    word_list = [word.lower() for word in word_list]    word_list = [word for word in word_list if len(word) > 1]print(word_list)產(chǎn)生所需的輸出 = ['apple', 'banana', 'cherry']我的問題是:為什么最初的代碼看起來最合乎邏輯、最有效,卻沒有產(chǎn)生預(yù)期的結(jié)果?達(dá)到預(yù)期結(jié)果的最佳“Pythonic”方式是什么?
查看完整描述

4 回答

?
小怪獸愛吃肉

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

你得到你得到的輸出的原因是

  1. 您在循環(huán)遍歷列表時(shí)正在從列表中刪除項(xiàng)目

  2. 您正在嘗試使用list.remove(僅修改列表并返回None)的輸出

您最后的列表理解 ( word_list = [word_list.remove(word) for word in word_list if len(word) == 1]) 本質(zhì)上等同于:

new_word_list = []

for word in word_list:

    if len(word) == 1:

        new_word_list.append(word_list.remove(word))

word_list = new_word_list

當(dāng)你遍歷它時(shí),會發(fā)生這種情況:


# word_list == ['a', 'apple', 'b', 'banana', 'c', 'cherry']

# new_word_list == []


word = word_list[0]  # word == 'a'


new_word_list.append(word_list.remove(word))


# word_list == ['apple', 'b', 'banana', 'c', 'cherry']

# new_word_list == [None]


word = word_list[1]  # word == 'b'


new_word_list.append(word_list.remove(word))


# word_list == ['apple', 'banana', 'c', 'cherry']

# new_word_list == [None, None]


word = word_list[2]  # word == 'c'


new_word_list.append(word_list.remove(word))


# word_list == ['apple', 'banana', 'cherry']

# new_word_list == [None, None, None]


word_list = new_word_list


# word_list == [None, None, None]

最好的“Pythonic”方式(在我看來)是:


with open('sample.txt') as input_file:

    file_content = input_file.read()


word_list = []

for word in file_content.strip().split(' '):

    if len(word) == 1:

        continue

    word_list.append(word.lower())


print(word_list)


查看完整回答
反對 回復(fù) 2023-03-08
?
慕碼人2483693

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

在您的第一種方法中,您將結(jié)果存儲word_list.remove(word)在無列表中。Bcz list.remove() 方法只返回對給定列表執(zhí)行的操作。

您的第二種方法是實(shí)現(xiàn)目標(biāo)的 pythonic 方法。


查看完整回答
反對 回復(fù) 2023-03-08
?
FFIVE

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

  1. 為什么最初的代碼看起來最合乎邏輯、最有效,卻沒有產(chǎn)生預(yù)期的結(jié)果?

建議不要在遍歷列表時(shí)更改列表。這是因?yàn)樗诘跏剂斜淼囊晥D,并且該視圖將與原始視圖不同。

  1. 達(dá)到預(yù)期結(jié)果的最佳“Pythonic”方式是什么?

你的第二次嘗試。但我會使用更好的命名約定,你的理解可以結(jié)合起來,因?yàn)槟阒皇窃诘谝粋€(gè)中將它們設(shè)為小寫:

word_list = input_file.read().strip().split(' ')
filtered_word_list = [word.lower() for word in word_list if len(word) > 1]


查看完整回答
反對 回復(fù) 2023-03-08
?
千巷貓影

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

第二次嘗試是最pythonic的。第一個(gè)仍然可以通過以下方式實(shí)現(xiàn):


filename = 'sample.txt'


with open(filename) as input_file:

    word_list = input_file.read().strip().split(' ')


word_list = [word.lower() for word in word_list]


for word in word_list:

    if len(word) == 1:

        word_list.remove(word)


print(word_list)


查看完整回答
反對 回復(fù) 2023-03-08
  • 4 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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