deep_in
接收元组tup和元素elem returns True
如果elem存在于tup中,False
则存在。
def deep_in(tup, elem):
for i in range(0, len(tup)+1):
if elem == tup[i]:
return True
else:
return False
我无法True
deep_in(((),(),(3,)), 3)
答案 0 :(得分:1)
要处理任意嵌套的元组,你可以递归查找嵌套元素:
def deep_in(tup, elem):
for v in tup:
if v == elem:
return True
if isinstance(v, tuple) and deep_in(v, elem):
return True
return False
或使用any()
:
def deep_in(tup, elem):
return any(deep_in(v, elem) if isinstance(v, tuple) else v == elem
for v in tup)
演示:
>>> def deep_in(tup, elem):
... for v in tup:
... if v == elem:
... return True
... if isinstance(v, tuple) and deep_in(v, elem):
... return True
... return False
...
>>> deep_in(((),(),(3,)), 3)
True
>>> def deep_in(tup, elem):
... return any(deep_in(v, elem) if isinstance(v, tuple) else v == elem
... for v in tup)
...
>>> deep_in(((),(),(3,)), 3)
True
如果没有递归,只需使用in
进行测试仍然需要您不要提前使用return
。
你的代码犯了这个错误;元组中的第一个元素不等于elem
触发立即return False
,而不测试元组的其余部分。
您的版本可以使用in
包含测试来修复,修复范围的上限并将else:
分支移出for
循环;循环结束时才返回False
:
def deep_in(tup, elem):
for i in range(len(tup)):
if elem in tup[i]:
return True
return False
但是你应该直接在元组上循环而不是使用range()
,你也可以在这里使用any()
:
def deep_in(tup, elem):
return any(elem in t for t in tup)