【发布时间】:2023-02-17 22:03:31
【问题描述】:
我正在研究列表理解并遇到了添加几个条件的可能性。我不知道我期望的行为是什么,但我无法解释我得到的是什么。为什么1变成3,2还是2,3变成6?
a = [x if x % 2 == 0 else x * 2 if x % 3 == 0 else x * 3 for x in range(1, 11)]
输出:
[3, 2, 6, 4, 15, 6, 21, 8, 18, 10]
【问题讨论】:
-
你至少应该尝试解释代码你写了.
-
由于 Python 的三元是
<done if True> if <condition> else <done if False>的形状,如果转换成 C 风格的三元会更容易阅读:x % 2 == 0 ? x : (x % 3 == 0 ? x * 2 : x * 3),其中三元的形状是<condition> ? <done if True> : <done if False>(加上大括号)。 -
这相当于
[x if x % 2 == 0 else (x * 2 if x % 3 == 0 else (x * 3)) for x in range(1, 11)]。这有帮助吗? -
请注意,这与其说是列表理解中使用的“标准”条件(过滤输入,因此输出往往包含更少的元素),不如说是嵌套的三元条件。这个例子也可以在列表理解之外使用。
-
这也属于以下类别:不要这样做,除非您试图参加混淆的 Python 竞赛(为此它的参赛成绩很差,但仍然如此)。