Python - 列表理解中断

时间:2015-07-17 16:28:22

标签: python list list-comprehension break

我有以下列表:

a = [[1,'abc',0],[1,'abc',2],[1,'abc',3],[2,'kak',0],[2,'kak',1],[2,'kak',2],[3,'kok,0]]

我想创建一个列表理解行,它返回b列表:

b = [[1,'abc',0],[2,'kak',0],[3,'kok',0]]

该列表由a。

的第一列条目的唯一值创建

我试着这样做:

aux1 = list(set([c[0] for c in a]))
b    = [[c for c in a break if c[0] == i] for i in aux1]

此代码解决了我的问题,但没有解决列表理解问题:

a = [[1,'abc',0],[1,'abc',2],[1,'abc',3],[2,'kak',0],[2,'kak',1],[2,'kak',2],[3,'kok',0]]

b = []

for aa in a:
    new = True
    for bb in b:        
        if bb[0]==aa[0]:
            new=False
            break
    if new:
        b.append(aa)

2 个答案:

答案 0 :(得分:1)

这会产生您正在寻找的输出:

a = [[1,'abc',0],[1,'abc',2],[1,'abc',3],[2,'kak',0],[2,'kak',1],[2,'kak',2],[3,'kok',0]]
b = list({x[0]:x for x in reversed(a)}.values())
print(b)

输出:

[[1, 'abc', 0], [2, 'kak', 0], [3, 'kok', 0]]

答案 1 :(得分:0)

如果您不关心内容列表中为列表b采取的第二个或第三个元素,则可以使用itertools.groupby作为 -

>>> b = [next(i) for x,i in groupby(sorted(a, key = lambda x: x[0]),lambda x: x[0])]
>>> b
[[1, 'abc', 0], [2, 'kak', 0], [3, 'kok', 0]]