如何解决对于if-else和只有if条件的情况,有人可以解释列表理解的内部工作吗?
我有以下三个表达式:
['-'+i+'-' if int(i)%2==0 else i for i in str(num).strip('-')]
~~~~(1)
[i if i in ar and ar[i]>4 for i in s]
~~~~~(2),(其中ar
是地图)
[i if i in ar and ar[i]>4 else continue for i in s]
~~~~~~(3)
仅表达式(1)有效。其余两个没有。但是,如果我重新编写表达式(2),如下所示:
[i for i in s if i in ar and ar[i]>4]
,效果很好。
我有兴趣了解其内部工作方式。
解决方法
['-'+i+'-' if int(i)%2==0 else i for i in str(num).strip('-')]
之所以有用,是因为其他原因。在这种情况下,它使用条件表达式[0],而不是理解列表的常规语法。 “列表推导由包含表达式的方括号组成,后跟一个for子句,然后是零个或多个for或if子句” [1]
正常形式为[expression_statement forloop if_filter]
,对吗?
因此,您应该拥有(p)而不是(2)
[i for i in s if i in ar and ar[i]>4]
等同于
alist = []
for i in s:
if i in ar and ar[i]>4]:
alist.append(i)
[0] https://docs.python.org/3/reference/expressions.html#conditional-expressions
[1] https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。