我正在尝试在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语句中()
和[]
之间的区别有一个大概的了解,所以我很高兴你能给我一个简短的解释。
答案 0 :(得分:6)
使用all
:
if(all(len(o) == 3 for o in octate_n)):
# do stuff
关于您的秒数问题,[o for o in octate_n]
创建的列表包含octate_n
中的所有项目(称为list comprehension),而(o for o in octate_n)
创建generator这将产生octate_n
的所有项目(这称为generator expression)。
答案 1 :(得分:2)
好吧,我可以告诉你条件语法有什么问题:你至少需要在括号内包含len(o)
。
[len(o) for o in octate_n]
此结构[expr for var in list]
称为列表推导,它是“expr
的每个元素的评估list
的简写,var
设置为元素,并列出结果的新列表。“在原始代码中,您没有任何expr
,这就是Python抱怨的原因。
现在,即使您解决了这个问题,也可以使用
if [len(o) for o in octate_n] == 3:
仍然存在将列表与数字进行比较的问题。虽然你在技术上可以这样做,但它可能并不意味着你所期望的:列表永远不会等于数字,因为它们是不同的对象。不过,现在还不太清楚你要做什么。如果你想查找 all 列表中的元素长度是否等于3,你会写
if all([len(o) == 3 for o in octate_n]):
或更有效率
if all(len(o) == 3 for o in octate_n):
请注意后面的语句中没有方括号。这是因为您实际上不需要在结果中创建列表;你只需要能够一次一个地检查它们并检查它们是否都是真的。省略括号是Python的含义。 (你只能在括号内做这个。)
答案 2 :(得分:0)
您在列表的单个元素上使用len。嗯..没有..你在未定义的元素上使用len(o)。 使用:
if (len(octate_n) == 3:
抱歉,得到了你的主意。如果你想检查列表的所有元素是3个字符长 - 使用“全部”,如下面的答案。
答案 3 :(得分:0)
我不确定你的问题到底是什么。以下是一系列可能性:
如果您想要返回长度为3的所有octate_n
成员:
with_len_3 = [o for o in octate_n if len(o) == 3]
如果您想确保octate_n
中有3个元素:
if len([o for o in octate_n]) == 3:
# do stuff
与
相同if len(octate_n) == 3:
# do stuff
如果您想确保octate_n
中的所有元素的长度为3:
if( all(len(o) == 3 for o in octate_n) ):
# do stuff
这是一个更清晰,更快的版本:
if len([o for o in octate_n if len(o) == 3]) == len(octate_n):
# do stuff