if对列表中每个项目的声明

时间:2011-12-22 07:18:29

标签: 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语句中()[]之间的区别有一个大概的了解,所以我很高兴你能给我一个简短的解释。

4 个答案:

答案 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