Python 针对列表中每个项目的if语句
我尝试在python中执行以下操作,但遇到无效语法错误: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语句中
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地址的每个部分是否有三位数字。而且你的意思是网络吗?
?