如何解决函数未返回预期列表
我有3个列表:
members = ['Alex','Danny','Kieran','Zoe','Caroline']
visitors = ['Scott','Helen','Raj','Danny']
signups = ['Helen','Scott']
该函数应返回既不是现有成员也不是新成员的visitors
列表。如果没有,则返回None
。
这是我的代码:
def guests(member,signup,visitor):
visit = []
for person in visitor:
if person not in member and signup:
visit.append(person)
return visit
return print("None.")
但是我的输出返回["Scott"]
。我似乎无法弄清楚我做得不好。
解决方法
首先,您在获得第一个值之后返回,其次您可能想要更改
if person not in member and signup
至if person not in member and person not in signup
members = ['Alex','Danny','Kieran','Zoe','Caroline']
visitors = ['Scott','Helen','Raj','Danny']
signups = ['Helen','Scott']
def guests(member,signup,visitor):
visit = []
for person in visitor:
if person not in member and person not in signup:
visit.append(person)
return visit
print(guests(members,signups,visitors))
,
person not in member and signup
被评估为(person not in member) and (signup)
。
当person
为'Scott'时,第一部分为True
,第二部分(signup
)为非空列表,因此其值为{{1 }}在布尔上下文中,因此整个条件为True
。
然后,您True
立即进行输出,而无需进一步循环。
您的意思是:
return
,
您的缩进是错误的,您在第一次注册并不是成员的人出现后返回列表的值,您应该将缩进修改为:
def guests(member,visitor):
visit = []
for person in visitor:
if person not in member and person not in signup:
visit.append(person)
return visit if len(visit) != 0 else None
另外,请注意我如何更改您的返回值。您不应该返回Print('None')
,因为尽管最终它将返回None(当print返回None时,这不是最佳实践)。
这里有两件事是错误的。
第一
using namespace cv;
QFile xmlRes(":/new/cascades/res/cascade.xml");
if (xmlRes.open(QIODevice::ReadOnly)) {
QString data(xmlRes.readAll());
FileStorage fs(data.toStdString().c_str(),FileStorage::MEMORY | FileStorage::FORMAT_XML);
if (!cascade.read(fs["cascade"]))
qDebug() << "ERROR: Could not read classifier cascade.";
}
这由python分两步进行解释。 “不在成员中的人”然后是“注册”,只要注册不为空,则注册为“ True”。因此它也会在“斯科特”上触发。
您反而想要:
if person not in member and signup:
第二次回访是在循环内,因此一旦找到第一个元素,它将返回列表。
您需要类似的东西
if person not in member and person not in signup:
,
@YashShah和@ThierryLathuille在他们的答案中解释了为什么您的代码不起作用。我会建议使用集的另一种方法
members = ['Alex','Scott']
def get_guests(members,visitors):
return list(set(visitors).difference(set(members).union(set(signups))))
# alternative:
# return list(set(visitors) - (set(members)|set(signups)))
print(get_guests(members,visitors))
输出
['Raj']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。