删除列表中的重复项,并使用该重复项在第一个出现的列表索引中创建子列表

时间:2018-09-11 03:10:01

标签: python

我一直在寻找答案,但是似乎找不到任何能做到这一点的优雅或蟒蛇般的东西。

基本上,如果我有一个列表:

A = [[“ 1a”,“ ab”],[“ 2b”,“ cd”],[“ 1a”,“ ef”]]

我想标识出在其第一个索引中具有相同值的每个项目,如果是这种情况,请修改列表,以使A变为:

A = [[[“ 1a”,[“ ab”,“ ef”]],[“ 2b”,“ cd”]]

因为排序很重要,所以我试图避免使用字典。

1 个答案:

答案 0 :(得分:0)

尝试zip + list comprehension +产品+ for循环+索引(甚至适用于以下列表):

from itertools import product
A = [["1a", "ab"], ["2b", "cd"], ["1a", "ef"], ['2b','gh']]
l,_=zip(*A)
l2=[idx for idx,i in enumerate(l) if l.count(i)>1]
l3=list(set([tuple(sorted((x,y))) for x,y in product(l2,repeat=2) if l[x]==l[y] and x!=y]))
for x,y in l3:
   A[x][1]=[A[x][1],A[y][1]]
   A.pop(y)
print(A)

输出:

[['1a', ['ab', 'ef']], ['2b', ['cd', 'gh']]]