到目前为止,我没有找到按特定条件拆分列表的便捷方法,例如,我有一个记录列表:
a = ((0,1),(1,0),(0,2),(1,0),(3,0),(4,0),(0,3),(1,5)....)
Run Code Online (Sandbox Code Playgroud)
我想将内容分成2个列表
alist = []
blist = []
for x in a:
if x[0] == 0:
alist.append(x)
elif x[0] == 1:
blist.append(x)
Run Code Online (Sandbox Code Playgroud)
不是很简洁.
写为列表理解:
aList = [x for x in a if x[0] == 0]
bList = [x for x in a if x[0] == 1]
Run Code Online (Sandbox Code Playgroud)
列表推导通常适用于阅读和性能,但在这种情况下,列表必须迭代两次.
有没有更好的方法来完成这项工作?
嗯,条件不同,难怪你需要两个循环.但如果你想牺牲一些可读性,
aList, bList = [[x for x in a if x[0] == i] for i in (0, 1)]
Run Code Online (Sandbox Code Playgroud)
添加一行将使循环更加简洁,代价是可读性(和FPness).
alist = []
blist = []
bothlists = [alist, blist]
for x in a:
bothlists[x[0]].append(x)
Run Code Online (Sandbox Code Playgroud)