recherche

Maison  >  Questions et réponses  >  le corps du texte

算法 - Python二维数组怎么求并集?

a=[[1,2,'g'],[2,4,'f']]
b=[[2,4,'f'],[1,2,'f']]

a和b的并集是

c=[[1,2,'g'],[2,4,'f'],[1,2,'f']]

无法使用set().union,怎么破?只能自己实现遍历么?

PHPzPHPz2887 Il y a quelques jours517

répondre à tous(3)je répondrai

  • 大家讲道理

    大家讲道理2017-04-17 17:28:55

    Vous pouvez utiliser le code suivant pour y parvenir :

    a=[[1,2,'g'],[2,4,'f']]
    b=[[2,4,'f'],[1,2,'f']]
    tmp = a + b
    c = [ (tmp[i]) for i in range(0, len(tmp)) if tmp[i] not in tmp[:i] ]
    

    Vérifier les résultats :

    print c
    [[1, 2, 'g'], [2, 4, 'f'], [1, 2, 'f']]

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:28:55

    Vous pouvez faire ceci :

    a=[[1,2,'g'],[2,4,'f']]
    b=[[2,4,'f'],[1,2,'f']]
    c=[list(i) for i in set(tuple(j) for j in a+b)]
    

    Vérifier les résultats :

    print c
    [[2, 4, 'f'], [1, 2, 'f'], [1, 2, 'g']]
    

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-17 17:28:55

    Il n'est certainement pas possible d'utiliser directement les opérations d'ensemble, car les éléments de la liste sont toujours des listes, qui sont des objets mutables, et les objets des opérations d'ensemble doivent être des objets immuables, donc si vous voulez le répéter, le plus simple La méthode est de La réponse est convertie en un tuple d'objet immuable, puis l'ensemble est dédupliqué. Comme suit, il s’agit en fait d’une traversée.

    map(list,set(map(tuple, a + b)))

    répondre
    0
  • Annulerrépondre