【问题标题】:Remove duplicate elements in list of lists删除列表列表中的重复元素
【发布时间】:2020-08-02 02:45:40
【问题描述】:

我试图弄清楚如何删除列表列表中的重复项,如果该元素已经存在于任何列表中,我希望它不再被添加。

这里是全部

def listeAmis(n) : 
    liste = []
    print("Rentrez un numéro d'un ami de ",n)
    a = 0
    while a!="na": 
        a=input("tapez 'na' s'il n'y a pas d'autres amis")
        liste.append(a) 
    last = int(len(liste)-1)
    del liste[last]
    return liste



def initReseau(n) : 
    i = 0
    listeR = []
    while i<n : 
        listeR.append(listeAmis(i))
        i = i+1
    return listeR

def ami(r,i,j) : 
    if j in r[i] and i in r[j]: 
        return True
    else : 
        return False

def groupeAmis(r,i) : 
    groupe = [i]
    a = 0
    while a < n-1 :  
        res = all(ami(r,elem,a) for elem in groupe)
        if res :
            groupe.append(a)
        a=a+1
    return groupe


def groupeAmisPartition(r) : 
    liste=[]
    for i in range(0,n) : 
        T = groupeAmis(r,i)
        liste.append(T)
    return liste




n = 8
r = [[2, 3], [3, 5], [0, 3, 6, 7], [0, 1, 2, 4, 5, 6], [3, 7],[1, 3, 6, 7], [2, 3, 5], [2, 4, 5]]
groupeAmisPartition(r)

这是我得到的:

[[0, 2, 3],[1, 3, 5],[2, 0, 3],[3, 0, 2],[4, 3],[5, 1, 3],[6, 2, 3],[7, 2]]

这就是我想要的:

[[0,2,3],[1,5],[4,7],[6]]

谢谢

【问题讨论】:

  • 输入是什么?
  • 输入是 r 吗?如果是这样,为什么预期输出的第一个列表 [0,2,3] 中有 0
  • 所有内部列表都已排序?
  • 你没有使用initReseau函数?

标签: python list sorting arraylist


【解决方案1】:

我的回答是基于您对问题的文字描述。

试试这个(代码注释中的解释):

r = [[2, 3], [3, 5], [0, 3, 6, 7], [0, 1, 2, 4, 5, 6], [3, 7],[1, 3, 6, 7], [2, 3, 5], [2, 4, 5]]
done= []
big_new_lst = []
# for items in initial list
for i in r:
    # initialize empty "small list"
    new_lst = []
    # for item in list in initial list
    for c in i:
        # if item is not in our done list
        if c not in done:
            #add it to our done list
            done.append(c)
            # add it to our new small list
            new_lst.append(c)
    # add the small list to the big list if it's not empty
    if new_lst:
        big_new_lst.append(new_lst)

print (big_new_lst)

输出:

[[2, 3], [5], [0, 6, 7], [1, 4]]

【讨论】:

  • @kederrac 这就是为什么我说我的回答是基于你对问题的文字描述。
  • 非常感谢,即使不是预期的输出,这也会有所帮助 实际上这是一个关于社交网络的练习。 r 是这样描述的网络 r[i] 是人 i 的所有朋友。问题是要确定“朋友组”,以便列表中的所有列表都代表都是朋友的人。
  • 但有一个限制,一个人 [i] 不能在两个不同的朋友组中..
【解决方案2】:

使用 Thaer 的代码,我得到了这个,仍然不是预期的,但几乎是:

def groupeAmisPartition(r) : 
    liste=[]
    for i in range(0,n) : 
        T = groupeAmis(r,i)
        liste.append(T)
    done= []
    big_new_lst = []
    for i in liste:
        new_lst = []
        for c in i:
            if c not in done:
                done.append(c)
                new_lst.append(c)
        if new_lst:
            big_new_lst.append(new_lst)
    return big_new_lst

输出:

[[0, 2, 3], [1, 5], [4], [6], [7]]

【讨论】:

  • 4 和 7 是朋友,他们之前没有加入过朋友组,所以他们应该是朋友组 [4,7]
猜你喜欢
  • 2020-11-02
  • 2018-05-02
  • 2014-07-06
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多