Python 针对列表中每个项目的if语句

Python 针对列表中每个项目的if语句,python,if-statement,Python,If Statement,我尝试在python中执行以下操作,但遇到无效语法错误: network_n = 192.168.38 octate_n = network_n.split(".") if (len(o) [for o in octate_n]) == 3: 但当我运行它时,我得到: if (len(o) [for o in octate_n]) == 3: ^ SyntaxError: invalid syntax 我的问题是if语句,有什么问题吗 我承认我对if语句中

我尝试在python中执行以下操作,但遇到无效语法错误:

network_n = 192.168.38
octate_n = network_n.split(".")
if (len(o) [for o in octate_n]) == 3:
但当我运行它时,我得到:

if (len(o) [for o in octate_n]) == 3:
                  ^
SyntaxError: invalid syntax
我的问题是if语句,有什么问题吗

我承认我对if语句中的
()
[]
之间的区别有一个大致的了解,因此我很高兴您能给我一个简短的解释。

使用:


关于你的第二个问题,
[o代表o在octate\u n]
创建一个包含
octate\u n
中所有项目的列表(称为a),而
(o代表o在octate\u n)
创建一个将产生
octate\u n
的所有项目的列表(称为a)。

你在列表的单个元素上使用len。嗯。。不在未定义的元素上使用len(o)。 使用:


对不起,我明白你的意思了。如果您想检查列表中的所有元素是否为3个字符长-请使用下面答案中的“all”

好吧,我可以告诉您条件语句的语法有什么问题:您至少需要在括号中包含
len(o)

[len(o) for o in octate_n]
这种结构被称为列表理解,它是“为
列表中的每个元素评估
expr
,将
var
设置为该元素,并生成一个新的结果列表”的缩写在原始代码中没有任何
expr
,这就是Python抱怨的原因

现在,即使你解决了这个问题,你也会

if [len(o) for o in octate_n] == 3:
这仍然存在一个问题,即您正在将列表与数字进行比较。虽然从技术上讲你可以做到这一点,但这可能并不意味着你所期望的:一个列表永远不会等于一个数字,因为它们是不同的对象。不过,不太清楚你想做什么。如果要确定列表中的所有元素的长度是否都等于3,可以编写

if all([len(o) == 3 for o in octate_n]):
或者更有效地说

if all(len(o) == 3 for o in octate_n):

注意后面的语句中没有方括号。这是因为你实际上不需要列出结果;你只需要一次一个地检查它们,看看它们是否都是真的。省略括号对Python来说就是这样的。(你只能在括号内回答。)

我不确定你的问题到底是什么。以下是一系列的可能性:

如果要返回长度为3的
octate\n
的所有成员:

with_len_3 = [o for o in octate_n if len(o) == 3]
if len([o for o in octate_n]) == 3:
    # do stuff
if( all(len(o) == 3 for o in octate_n) ):
    # do stuff

如果要确保
octate\n
中有3个元素:

with_len_3 = [o for o in octate_n if len(o) == 3]
if len([o for o in octate_n]) == 3:
    # do stuff
if( all(len(o) == 3 for o in octate_n) ):
    # do stuff
这和


如果要确保
octate\n
中的所有元素的长度均为3:

with_len_3 = [o for o in octate_n if len(o) == 3]
if len([o for o in octate_n]) == 3:
    # do stuff
if( all(len(o) == 3 for o in octate_n) ):
    # do stuff
这是一个更干净、更快的版本:


这不是OP的意图。他想检查IP地址的每个部分是否有三位数字。而且你的意思是网络吗?