是否有更简洁的方法将谓词拆分为两个列表?
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每个元素只计算一次是可取的.
也许
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.
errors, okays = [], []
for r in results:
(errors, okays)[success_condition(r)].append(r)
Run Code Online (Sandbox Code Playgroud)