[英]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”未定義”。
這是因為未定義,假設這是您的完整代碼。 b
, c
和d
。
您需要事先使用一些字符串對象定義這些變量(1.),或者將字母本身寫為字符串文字(2.):
a, b, c, d = "my_string1", "my_string2", "my_string3", "my_string4"
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.