如何在条件上拆分列表?

Max*_*Max 5 python

到目前为止,我没有找到按特定条件拆分列表的便捷方法,例如,我有一个记录列表:

 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)

列表推导通常适用于阅读和性能,但在这种情况下,列表必须迭代两次.

有没有更好的方法来完成这项工作?

Lev*_*sky 6

嗯,条件不同,难怪你需要两个循环.但如果你想牺牲一些可读性,

aList, bList = [[x for x in a if x[0] == i] for i in (0, 1)]
Run Code Online (Sandbox Code Playgroud)

  • @InbarRose哦来吧:)它仍然是两个循环,其中一个就足够了.更好地赞美其他答案:) (3认同)

Ign*_*ams 6

添加一行将使循环更加简洁,代价是可读性(和FPness).

alist = []
blist = []
bothlists = [alist, blist]
for x in a:
  bothlists[x[0]].append(x)
Run Code Online (Sandbox Code Playgroud)