我有这个
s = ['son','abc','pro','bro']
b = ['son','bro']
c = ['pro','quo']
预期的输出是这样的。输出中的项目是 index(item_in_s)
如果它存在于列表中 b
。或者 index(item_in_s)+10
如果项目在 c
中。
[0,12,3]
我试过这个:
index_list = [s.index(item) if item in b else s.index(item)+10 if item in c for item in s]
print(index)
但显然这是一个语法错误。所以我尝试了这个:
index_list = [s.index(item) if item in b else s.index(item)+10 for item in s if item in c]
print(index)
输出:
[12]
这只是改变了整个逻辑。虽然我可以做到
fin = [s.index(item) if item in b else s.index(item)+10 if item in c else '' for item in s]
fin = [item for item in fin if item!='']
print(fin)
获得所需的输出:
[0, 12, 3]
但是我如何在列表理解本身中获得我想要的东西,或者在列表理解中是否有类似 else continue
的东西?
原文由 void 发布,翻译遵循 CC BY-SA 4.0 许可协议
从根本上说,列表理解迫使你变得非常低效:
这必须检查成员资格
item
在b
和c
如果你想要那个输出,在最坏的情况下 _每两次_。相反, 只需使用 for-loop :简单、可读、直接和 Pythonic。
编辑
你可以用 赋值表达式 做一些接近于此的事情:
但我还是更喜欢循环。