以下是一个示例代码,可以帮助解释下述奇怪行为:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x**2 for x in a if x%2==0]
print(b)
当运行上述代码时,我们预计输出值为:
[4, 16, 36, 64, 100]
然而,实际输出为:
[4, 16, 36, 64, 100]
这正是我们预期的结果。但是,将上述语句进一步改写为:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x**2 for x in a if x%2==0 if x%4==0]
print(b)
我们期待输出为:
[16, 64]
(即匹配x%2==0和x%4==0的数字的平方)。但是,实际输出为:
[64]
这是一个不理解的奇怪行为。问题出在第二个if条件语句中。 当使用两个if条件语句时,Python将它们视为“and”操作。因此,上述条件引用了x%2 == 0和x%4 == 0的数字,并将它们的平方值添加到列表b中。
但是,在这种情况下,两个if条件是等价的。因此,您可以通过编写单个if条件语句来解决问题:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x**2 for x in a if x%2==0 and x%4==0]
print(b)
输出:
[16, 64]
现在,Python将if语句视为一个逻辑操作,因此只有当x%2==0和x%4==0时才将相应值添加到列表b中。
上一篇:不理解的PL/SQL示例
下一篇:不理解的一个类SVM玩具示例