Python for 和 if 在一行

新手上路,请多包涵

我对 python 有疑问。

我列一个简单的清单:

 >>> my_list = ["one","two","three"]

我想创建一个“单行代码”来查找字符串。

例如,我有这段代码:

 >>> [(i) for i in my_list if i=="two"]
['two']

但是当我看到变量错误时(我找到了列表的最后一个值):

 >>> print i
three

为什么我的变量包含最后一个元素而不是我要查找的元素?

原文由 rostonik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
2 个回答

您正在使用列表理解生成 _过滤列表_。 i 仍然绑定到该列表的每个元素,最后一个元素仍然是 'three' ,即使它随后被从正在生成的列表中过滤掉。

您不应该使用列表理解来挑选一个元素。只需使用 for 循环和 break 结束它:

 for elem in my_list:
    if elem == 'two':
        break

如果你 必须 有一个单行代码(这与 Python 的理念背道而驰,其中 _可读性很重要_),请使用 next() 函数 和生成器表达式:

 i = next((elem for elem in my_list if elem == 'two'), None)

如果没有这样的匹配元素,它将设置 iNone

以上不是有用的过滤器;您实际上是在测试值 'two' 是否在列表中。您可以为此使用 in

 elem = 'two' if 'two' in my_list else None

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 4.0 许可协议

当你表演

>>> [(i) for i in my_list if i=="two"]

i 遍历列表 my_list 。当列表理解完成评估时, i 被分配给迭代中的最后一项,即 "three"

原文由 Cong Ma 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题