python中的所有和任何输出

时间:2019-05-15 10:18:26

标签: python python-3.x

我正在解决hackerrank中的一个问题,此输出使我感到困惑:

sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

有人可以解释一下Python如何解释第二个表达式吗?  为什么输出为True?

2 个答案:

答案 0 :(得分:0)

为什么第一个对任何评估都为真

[str(x)==str(x)[::-1] for x in lil]
[str(x)==str(x)[::-1] for x in [1, 81]]
[str(1)==str(1)[::-1], str(81)==str(81)[::-1]]
['1'=='1'[::-1], '81'=='81'[::-1]]
['1'=='1', '81'=='18']
[True, False]

第二版出现错误(正确) TypeError: 'str' object is not callable 这是因为[str(x)==str(x)[::-1]] for x in lil是无效的生成器。

注意任何等价于

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

https://docs.python.org/3/library/functions.html#any

答案 1 :(得分:-1)

任何是可用于列表的功能。在第二个代码中,您想使用列表理解来创建列表。因此,在第二个代码中,没有生成 any 列表中的括号,因为该命令不知道在哪里寻找x。代码

[str(x)==str(x)[::-1]]

不会生成任何列表,但是会生成代码

[str(x)==str(x)[::-1] for x in lil]

产生。