我有以下列表:
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)
答案 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]]