voi*_*oid 4 python list-comprehension list python-2.7 python-3.x
我有这个
s = ['son','abc','pro','bro']
b = ['son','bro']
c = ['pro','quo']
Run Code Online (Sandbox Code Playgroud)
预期的输出是这样的。index(item_in_s)如果它出现在 list 中,则输出中的项目所在的位置b。或者index(item_in_s)+10如果一个项目在c.
[0,12,3]
Run Code Online (Sandbox Code Playgroud)
我试过这个:
index_list = [s.index(item) if item in b else s.index(item)+10 if item in c for item in s]
print(index)
Run Code Online (Sandbox Code Playgroud)
但显然这是一个语法错误。所以我试过这个:
index_list = [s.index(item) if item in b else s.index(item)+10 for item in s if item in c]
print(index)
Run Code Online (Sandbox Code Playgroud)
输出:
[12]
Run Code Online (Sandbox Code Playgroud)
这只是改变了整个逻辑。虽然我可以做到这一点
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)
Run Code Online (Sandbox Code Playgroud)
获得的期望输出:
[0, 12, 3]
Run Code Online (Sandbox Code Playgroud)
但是我如何在列表理解本身中获得我想要的东西,或者在列表理解中是否有类似的东西else continue?
从根本上说,列表理解会迫使你变得非常低效:
>>> [i if item in b else i + 10 if item in c else None for i, item in enumerate(s) if item in b or item in c]
[0, 12, 3]
Run Code Online (Sandbox Code Playgroud)
这必须检查成员item在b与c 各两次,如果你想要的产量在最坏的情况。相反,只需使用 for 循环:
>>> index_list = []
>>> for i, item in enumerate(s):
... if item in b:
... index_list.append(i)
... elif item in c:
... index_list.append(i + 10)
...
>>> index_list
[0, 12, 3]
>>>
Run Code Online (Sandbox Code Playgroud)
简单、可读、直接和 Pythonic。
index_list = [s.index(item) if item in b else s.index(item) + 10 for item in s if item in b or item in c]
Run Code Online (Sandbox Code Playgroud)
我们确保它在 b 或 c 中,然后索引将是这两种情况之一。
| 归档时间: |
|
| 查看次数: |
18207 次 |
| 最近记录: |