列表按谓词拆分

900*_*000 7 python

是否有更简洁的方法将谓词拆分为两个列表?

errors, okays = [], []
for r in results:
    if success_condition(r):
        okays.append(r)
    else:
        errors.append(r)
Run Code Online (Sandbox Code Playgroud)

据我所知,这可以变成丑陋的单行使用reduce; 这不是我想要的.

更新:success_condition每个元素只计算一次是可取的.

huo*_*uon 6

也许

for r in results:
    (okays if success_condition(r) else errors).append(r)
Run Code Online (Sandbox Code Playgroud)

但这看起来并不像Pythonic.


不直接相关,但如果一个人正在寻找效率,缓存方法查找会更好:

okays_append = okays.append
errors_append = errors.append

for r in results:
    (okays_append if success_condition(r) else errors_append)(r)
Run Code Online (Sandbox Code Playgroud)

这更像是Pythonic.


Joh*_*ooy 5

errors, okays = [], []
for r in results:
    (errors, okays)[success_condition(r)].append(r)
Run Code Online (Sandbox Code Playgroud)