微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在 Python 列表理解中创建一个变量吗?

如何解决我可以在 Python 列表理解中创建一个变量吗?

嗯,我正在学习列表理解。

这是我的示例代码

m = ["m","male","M","Male"]
f = ["f","female","F","Female"]
gen = ["f","Male","x"]
arr = []
for i in gen:
    if i in f:
        arr.append(1)
    elif i in m:
        arr.append(0)
print(arr) #It shows [1,1,0]

如您所知,这是超级简单的代码。所以我认为可以使用列表理解来实现。

所以我尝试了下面的代码,但它显示了语法错误


arr2 = [1 if i in f  else 0 if i in m  for i in gen] #It shows me Syntax Error at "for"

所以我尝试了这段代码,它运行了。

arr2 = [1 if i in f  else 0 if i in m else 2 for i in gen] #it shows me [1,2]

但是在这种情况下,它在最后一个索引中包含 2。我不能包含 2。

那么在这种情况下,我可以仅使用列表推导式得到结果 [1,0] 吗?

解决方法

arr = [1 if i in f else 0 for i in [j for j in gen if j in f+m]]

没有人说你不能进行嵌套理解 :)

,

要使用列表推导式执行此操作,您可以在循环部分之后添加一个条件,以检查 gen 中的值是否在其他列表中的任何一个中。这样,如果条件为 False,则该值不会添加到最终列表中。

arr2 = [1 if i in f else 0 if i in m else None  for i in gen  if i in m or i in f]
print(arr2)

不过,这对于单线来说有点复杂。我怀疑如果一个月后我再看它,我是否会记得它在做什么。在我看来,循环解决方案更容易阅读和理解。

,

使用嵌套列表理解:

[x for x in [1 if i in f else 0 if i in m else None for i in gen] if x is not None]

返回你想要的:

[1,1,0]
,

您可以使用 f 中的存在来生成 1 或 0 并排除不在两个列表中的性别:

m   = ["m","male","M","Male"]
f   = ["f","female","F","Female"]
gen = ["f","Male","x"]

arr = [ int(g in f) for g in gen if g in m+f ]

print(arr) # [1,0]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?