这是我的迭代解决方案:
def exists(key, arg):
if not arg:
return False
else:
for element in arg:
if isinstance(element,list):
for i in element:
if i==key:
return True
elif element==key:
return True
return False
print(exists("f", ["a", ["h", "e", "j"], ["t", "e", "s", "c", "o"]]))
然而,我的L.A.想要一个双递归函数来解决这个问题。
我的尝试:
def exists(key, arg):
if not arg: //base case
return False
elif arg[0]==key: //if we find the key from the first trial
return True
else:
return (exists(arg[0:],key))
这不起作用;它不应该,因为没有停止。此外,它没有考虑列表清单;我不知道该怎么做。
任何回答,评论等都表示赞赏
答案 0 :(得分:4)
def exists(k, l):
if not isinstance(l, list):
return False
if k in l:
return True
return any(map(lambda sublist: exists(k, sublist), l))
答案 1 :(得分:2)
逻辑是迭代列表中的每个元素并检查:
下面是一个示例代码,用于查找嵌套列表中是否存在key
def exists(key, my_list):
for item in my_list:
if isinstance(item, list):
if exists(key, item): # <--Recursive Call
return True
elif item == key:
return True
return False
# Example
>>> my_list = [[[1, 2, 3, 4, 5], [6, 7,]], [8, 9], 10]
>>> exists(2, my_list)
True
>>> exists(6, my_list)
True
>>> exists(8, my_list)
True
>>> exists(10, my_list)
True
>>> exists(11, my_list)
False
答案 2 :(得分:2)
你很亲密。您只需要检查arg [0]是否是子列表以及是否进行新呼叫。接下来,您缺少一个循环来遍历列表中的所有项目。这应该有用。
def exists(key, arg):
for item in arg:
if isinstance(item, list):
# Recursive call with sublist
if exists(key, item):
return True
else:
if item == key:
return True
return False
答案 3 :(得分:2)
如果我们考虑这些情况:
bool init(void* ptriface, int version)
{
void* iface; // todo: make this type to required version
// Cast iface at run-time according to version number
// switch(version){}
iface = reinterpret_cast<MSTSCLib::IMsRdpClient9*>(ptriface);
iface = reinterpret_cast<MSTSCLib::IMsRdpClient8*>(ptriface);
iface = reinterpret_cast<MSTSCLib::IMsRdpClient7*>(ptriface);
// switch(version){}
iface->putSomeData1();
iface->putSomeData2();
iface->putSomeData3();
iface->putSomeData4();
}
为空:未找到密钥my_list
不是列表:找不到密钥my_list
是非空列表(两种情况):
my_list
是关键:找到了my_list[0]
和my_list[0]
代码将是
my_list[1:]
甚至
def exists(key, my_list):
if not isinstance(my_list, list) or not my_list:
return False
return (my_list[0] == key
or exists(key, my_list[0])
or exists(key, my_list[1:]))
答案 4 :(得分:2)
感谢大家的帮助,这是我想出的答案。虽然它看起来不像已经提供的大多数答案那样优雅,但这个答案是我的实验室教师将接受的唯一答案,因为它是一种纯函数式编程方法,意味着没有副作用或循环:
def exists(key, seq):
if not seq:
return False
elif seq[0]==key:
return True
if isinstance(seq[0],list):
return(exists(key,seq[0]) or exists(key,seq[1:]))
else:
return exists(key,seq[1:])
return False
print(findkey("s", ["g","t", "e", ["s"], ["l","k","s",["d","f"],"w"], "o"]))