我怎么能在一行中说“如果a_list为空或a_list [0] .property == something”,请检查一行?

时间:2018-06-29 07:33:31

标签: python list comparison

考虑

teams = [[], []]

我想为团队添加人员,但前提是(1)他们与团队中的其他人属于同一公司,或者(b)如果团队当前为空。简单的方法是:

for team in teams:
    if len(team) > 0: # could also use "if bool(team):"
        if team[0].company == new_person.company:
           team.append(new_person)
           break
        else:
            continue
    else:
        team.append(new_person)
        break
else:
    teams.append([])
    teams[-1].append(new_person)

在我看来,做出简单决定的行很多。复杂的因素是可能存在一个空列表,如果我尝试查看其元素之一的属性,则会给我一个错误。

我怎么一行if a_list is empty or a_list[0].property == something:呢?

3 个答案:

答案 0 :(得分:4)

您是说这个意思吗?:

...
if not a_list or a_list[0].property == something:
    ...

答案 1 :(得分:0)

您可以尝试以下方法:

# hasatrr -> some safety check
if not a_list or (hasatrr(a_list[0], 'property') and a_list[0].property == something)):
    <perform your operation>
else:
    <perform your else operation>

答案 2 :(得分:0)

我找到了另一种方法,方法是使用我发现的here扩展到以下内容:

if next(iter(team, new_person)).company == new_person.company:

但是我认为U9-Forward的回应确实是最好的方法。 另外,请牢记bruno desthuilliers所说的话:

or运算符的第二个操作数仅在第一个操作数为false时才求值(因为如果第一个操作数为true,则表达式为true,这是逻辑或”

的定义