为什么这种格式无效?

时间:2019-05-19 00:53:57

标签: python

for skill in skills if skill != "engineering":
   ...

技能是一个列表,我想在遍历该列表时进行检查。

7 个答案:

答案 0 :(得分:2)

这是正确的版本

breakfast_menu['breakfast_menu']['food'][1]['calories'] = 900

答案 1 :(得分:2)

另一种方式。

for skill in [skill for skill in skills if skill != "engineering"]:

答案 2 :(得分:1)

需要为单独的行,并且for循环行必须以冒号以及if语句结尾。

skills = ['test','testing', 'engineering']

for skill in skills: 
  if skill != "engineering":
    print(skill)

答案 3 :(得分:0)

您可以使用过滤器

for skill in filter(lambda skill: skill != "engineering", skills):

这更具可读性。如果您的过滤需要更多逻辑,则可以轻松地用函数替换lambda表达式。

答案 4 :(得分:0)

如果您想过滤掉任何不等于'engineering'的技能,则可以使用filter

for skill in filter('engineering'.__ne__, skills):

我个人更喜欢lambda

答案 5 :(得分:0)

for skill in skills if skill != "engineering":无效,因为在Python中,显式for循环采用以下形式:

for item in collection:

此行分为四个部分

  1. for语句
  2. item,即迭代中的当前元素
  3. in运算符
  4. 正在迭代的集合

问题中的代码与此格式不匹配,因此在语法上无效。

但是,Python在内部构造中也具有隐式for循环,称为理解。用于创建列表的简单理解-称为列表理解-如下:

new_list = [thing for thing in collection]

此行包括:

  1. 指向已创建列表(new_list)的变量
  2. 赋值运算符=
  3. 一对方括号[ ],表示结果将是一个列表
  4. 将添加到新列表中的项目
  5. for子句表示隐式for循环
  6. 迭代中的当前项目
  7. in运算符
  8. 正在迭代的集合

问题中的代码看起来好像是从包含条件的列表理解中获取的,其形式为

new_list = [thing for thing in collection if some_condition_is_true]

Python tutorial具有出色的section on list comprehensions,它涵盖了更复杂的类型-多个循环和/或条件。也有创建字典和集合的字典和集合理解。 generator expressions使用相似的语法,但是创建生成器而不是具体的集合。

答案 6 :(得分:0)

解决方案:

skills = ["testing", "management", "engineering"]
    for skill in [skill for skill in skills if skill != "engineering"]:
        print("%s" % skill)

输出:

>>>python test.py 
testing
management