簡體   English   中英

檢查列表中是否存在字符

[英]Check whether character exists in list

我正在嘗試編寫一個遞歸函數,以檢查列表中是否存在某個字符(列表可以包含子列表)。

到目前為止,我已經提出了這個建議,但是它似乎沒有用。 我究竟做錯了什么?

    def exists(str, seq):
        if not seq:
            return 0
        elif isinstance(seq[0], list):
            return exists(seq[0]) + exists(seq[1:])
        elif str == seq[0]:
            return True
        else:
            return exists(seq[1:])

如果我嘗試

    print(exists("c", [a,[b,c],d]))

我得到的名稱“ a”未定義

def exists(str, seq):

您不應使用內置類型str作為變量的名稱。

        return 0

對於二進制函數,應返回False而不是0。

        return exists(seq[0]) + exists(seq[1:])

exist調用必須有兩個參數,而不是一個。 並且您應該使用or ,而不是+

        return exists(seq[1:])

exist調用必須有兩個參數,而不是一個。

print(exists("c", [a,[b,c],d]))

[a,[b,c],d]意思是“包含名為a,b,c和d的變量的嵌套列表”。 如果您沒有使用這些名稱的變量,則將導致NameError崩潰。 也許您打算使用字符串文字。

def exists(s, seq):
    if not seq:
        return False
    elif isinstance(seq[0], list):
        return exists(s, seq[0]) or exists(s, seq[1:])
    elif s == seq[0]:
        return True
    else:
        return exists(s, seq[1:])

print(exists("c", ["a",["b","c"],"d"]))

“我得到的名稱“ a”未定義”。

這是因為未定義,假設這是您的完整代碼。 bcd

您需要事先使用一些字符串對象定義這些變量(1.),或者將字母本身寫為字符串文字(2.):

  1. a, b, c, d = "my_string1", "my_string2", "my_string3", "my_string4"
  2. print(exists('c', ['a', ['b', 'c'], 'd']))

除此之外,您將函數定義為def exists(str, seq):但是將其調用為exists(seq[0]) ,這意味着您缺少參數。

然后,您嘗試添加可能有用的布爾值,但是我不確定這是否是您想要實現的值: return exists(seq[0]) + exists(seq[1:]) 如果轉換為布爾值,則2也將為True 但是,如果其中一個語句為0也將為True 要檢查兩者是否均為True ,應將值相乘。 另外,請嘗試對每種返回情況使用相同的返回類型。

您還使用了seq的第一個字符(或項目),而您實際上想使用字符串str的第一個字符。 小心! str是類型類,請勿將其用作變量名。

暫無
暫無

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

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