微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

函数未返回预期列表

如何解决函数未返回预期列表

我有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 signupif 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 举报,一经查实,本站将立刻删除。