关于python:如果一行中的”list”是空的或”list[0].property==something”,我怎么能说”check in one line”?

How can I say check in one line “if a_list is empty or a_list[0].property == something” in one line?

考虑

1
teams = [[], []]

我想在团队中添加一个人,但前提是(1)他们与团队中的其他人属于同一个公司,或者(b)团队当前为空。直接前进的道路是:

1
2
3
4
5
6
7
8
9
10
11
12
13
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:


你是说这个?:

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


我找到了另一种方法,通过使用我在这里找到的,我进一步得到了:

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

但我认为U9前锋的反应确实是最好的方式。同时,很高兴记住布鲁诺·德施韦利尔斯的话:

or运算符的第二个操作数只在第一个操作数为假时计算(因为如果第一个操作数为真,则表达式为真,这是逻辑或的定义)


您可以尝试以下操作:

1
2
3
4
5
# 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>