【发布时间】:2017-11-14 18:10:39
【问题描述】:
我有这个
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 之类的东西?
【问题讨论】:
-
我不太明白你想在这里做什么。
-
只需输入类似
[x if x in list1 else x+10 if x in list2 for x in my_list]的内容,它会给出语法错误。 -
我想要
[x if x in list1 else x+10 if x in list2 else pass for x in my_list]之类的东西,但我知道 pass 也会出现语法错误。有其他选择吗? -
把你的代码分成几行。我不明白你对输入的输出是什么
-
只是。写。答:对于。环形。并使用
enumerate而不是.index,这会使您的算法效率低下。
标签: python python-2.7 list python-3.x list-comprehension