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

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

在對列表進(jìn)行雙重遞歸時,“預(yù)檢查”是避免添加無類型或空字符串的首選方法嗎?

在對列表進(jìn)行雙重遞歸時,“預(yù)檢查”是避免添加無類型或空字符串的首選方法嗎?

MMTTMM 2021-11-16 09:58:10
我正在對 python3 中的列表進(jìn)行一些遞歸練習(xí),但遇到了一個問題,我的返回列表會填充一些不需要的 None 類型。這個特殊的練習(xí)是為了創(chuàng)建一個從列表中刪除所有元音字符串的函數(shù)。輸入列表中的所有元素都是長度為 1 的字符串,但列表也可以包含更多列表。def without_vowels(arg):    vowels = "aeiuo???AEIUO???"    if not arg:        return arg    elif isinstance(arg, str):        if not arg in vowels:            return arg        else:            return ""    elif isinstance(arg, list):        if without_vowels(arg[0]) == "":            return without_vowels(arg[1:])        else:            return [without_vowels(arg[0])] + without_vowels(arg[1:])預(yù)期輸出:>>> test = ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]>>> without_vowels(test)>>> [['h', 'j'], ['t', 's', 'c']]最初,為了在檢測時“刪除”元音,我根本不會返回任何內(nèi)容。這導(dǎo)致 None-types 被添加到列表中。沒有解決方法的輸出(刪除了第 10,11, 14-16 行):>>> without_vowels(test)>>> [None, ['h', None, 'j'], ['t', None, 's', 'c', None]]為了解決這個問題,我更改了代碼以在找到元音時返回一個空字符串,并在再次調(diào)用該函數(shù)以繼續(xù)之前添加了一個“預(yù)檢查”,基本上只是檢查函數(shù)調(diào)用是否會找到一個元音(并返回"") 并且在這種情況下跳到列表參數(shù)的下一部分。我覺得我遺漏了一些明顯的東西,應(yīng)該有一個更好的解決方案而不使用像這樣的變通方法。謝謝編輯:此特定練習(xí)旨在通過雙遞歸解決,而不是通過迭代和單遞歸的組合解決
查看完整描述

3 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗 獲得超5個贊

這個特定的練習(xí)旨在用雙遞歸來解決,而不是用迭代和單遞歸的組合來解決


我的遞歸方法是保持簡單,讓遞歸為您完成工作:


VOWELS = set("aeiuo???AEIUO???")


def without_vowels(argument):


    if not argument:

        return argument


    head, *tail = argument


    if isinstance(head, list):

        head = without_vowels(head)

    elif head in VOWELS:

        return without_vowels(tail)


    return [head, *without_vowels(tail)]

用法


>>> test = ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]

>>> without_vowels(test)

[['h', 'j'], ['t', 's', 'c']]

>>> 


查看完整回答
反對 回復(fù) 2021-11-16
?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊

我試圖在單個列表理解中實現(xiàn)它,但我太累了,無法讓它工作。


這是我對您的問題的解決方案:


def without_vowels(arg):

    vowels = "aeiuo???AEIUO???"

    returnList = []

    for entry in arg:

        if type(entry) == str and entry not in vowels:

            returnList.append(entry)

        elif type(entry) == list:

            returnList.append(without_vowels(entry))

    return returnList


test = ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]

print(without_vowels(test))

以及上面代碼的輸出:


>>> without_vowels(test)

[['h', 'j'], ['t', 's', 'c']]

編輯:我想我的解決方案會返回一個空列表,如果列表中唯一的條目是元音,但如果沒關(guān)系,那么這應(yīng)該可以完成工作。


查看完整回答
反對 回復(fù) 2021-11-16
?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗 獲得超3個贊

我認(rèn)為以下實現(xiàn)使您的問題沒有實際意義:


VOWELS = set("aeiuo???AEIUO???")


def without_vowels(arg):

    if isinstance(arg, list):

        return [without_vowels(item) for item in arg if without_vowels(item)]

    elif isinstance(arg, str):

        non_vowels = [ch for ch in arg if ch not in VOWELS]

        if len(non_vowels) > 2:

            return non_vowels

        elif len(non_vowels) == 1:

            return non_vowels[0]

        return non_vowels


test = ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]


print(without_vowels(test))  # -> [['h', 'j'], ['t', 's', 'c']]


查看完整回答
反對 回復(fù) 2021-11-16
  • 3 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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