如何解决我可以在 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 举报,一经查实,本站将立刻删除。