Rus*_*aul 16 python conditional list-comprehension
我想知道,是否有可能if在列表理解中加入多个条件?我在文档中没有找到这样的东西.
我希望能够做这样的事情
ar=[]
for i in range(1,n):
if i%4 == 0: ar.append('four')
elif i%6 == 0: ar.append('six')
else: ar.append(i)
Run Code Online (Sandbox Code Playgroud)
使用列表理解.我该怎么做?
这甚至可能吗?如果不是,那么最优雅(pythonic)的方法是什么呢?
Dav*_*son 28
怎么样
ar = [('four' if i % 4 == 0 else ('six' if i % 6 == 0 else i)) for i in range(1, n)]
Run Code Online (Sandbox Code Playgroud)
例如,如果n = 30是这样的话
[1, 2, 3, 'four', 5, 'six', 7, 'four', 9, 10, 11, 'four', 13, 14, 15, 'four', 17, 'six', 19, 'four', 21, 22, 23, 'four', 25, 26, 27, 'four', 29]
Run Code Online (Sandbox Code Playgroud)
ETA:以下是您可以应用条件列表的方法:
CONDITIONS = [(lambda i: i % 4 == 0, "four"), (lambda i: i % 6 == 0, "six"),
(lambda i: i % 7 == 0, "seven")]
def apply_conditions(i):
for condition, replacement in CONDITIONS:
if condition(i):
return replacement
return i
ar = map(apply_conditions, range(0, n))
Run Code Online (Sandbox Code Playgroud)
您可以将逻辑放在一个单独的函数中,然后具有列表理解的优雅以及函数的可读性:
def cond(i):
if i % 4 == 0: return 'four'
elif i % 6 == 0: return 'six'
return i
l=[cond(i) for i in range(1,n)]
Run Code Online (Sandbox Code Playgroud)
ar = ["four" if i%4==0 else "six" if i%6==0 else i for i in range(1,30)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21209 次 |
| 最近记录: |