Как мне сделать этот список списков в список кортежей? - PullRequest
0 голосов
/ 23 апреля 2019

У меня небольшая проблема с созданием этого списка списков

triangles= [[0, 30, 31], [2, 32, 38], [3, 24, 46], [4, 14, 27], [10, 18, 48], [12, 21, 35], [15, 39, 45], [17, 32, 38], [19, 32, 38], [21, 43, 44], [29, 43, 44]]

в такой список:

[(0,30),(30,31),(0,31),(2,32),(32,38),(2,38).. etc]

У меня уже естьпопробовал это:

c_list=list(nx.clique.enumerate_all_cliques(G))
triangles=[x for x in c_list if len(x)==3]
for [u,v,w] in triangles:
    print((u,v),(v,w),(u,w))

, так как «треугольники» - это список узлов, которые образуют треугольники в графе, и мне нужны ребра, чтобы я мог построить график треугольников.Однако я не могу использовать этот код, потому что у него нет типа.Так как мне превратить его в список кортежей?

Ответы [ 4 ]

2 голосов
/ 23 апреля 2019
>>> c_list = [[0, 30, 31], [2, 32, 38], [3, 24, 46], [4, 14, 27], [10, 18, 48], [12, 21, 35], [15, 39, 45], [17, 32, 38], [19, 32, 38], [21, 43, 44], [29, 43, 44]]
>>> import itertools
>>> [t for L in c_list for t in itertools.combinations(L, 2)]
[(0, 30), (0, 31), (30, 31), (2, 32), (2, 38), (32, 38), (3, 24), (3, 46), (24, 46), (4, 14), (4, 27), (14, 27), (10, 18), (10, 48), (18, 48), (12, 21), (12, 35), (21, 35), (15, 39), (15, 45), (39, 45), (17, 32), (17, 38), (32, 38), (19, 32), (19, 38), (32, 38), (21, 43), (21, 44), (43, 44), (29, 43), (29, 44), (43, 44)]

Понимание списка простое:

  • сначала возьмем каждый список L из 3 элементов (ребер треугольника) в c_list;
  • секунда, создайте комбинации ребер для каждого L с помощью itertools.combinations;
  • в-третьих, упакуйте список с каждой комбинацией.
2 голосов
/ 23 апреля 2019
triangles = [[0, 30, 31], [2, 32, 38], [3, 24, 46], [4, 14, 27], [10, 18, 48], [12, 21, 35], [15, 39, 45], [17, 32, 38], [19, 32, 38], [21, 43, 44], [29, 43, 44]] 
y = list()
for i in triangles:
  y.append((i[0], i[1]))
  y.append((i[1], i[2]))
  y.append((i[0], i[2]))
print(y)

выход: [(0, 30), (30, 31), (0, 31), (2, 32), (32, 38), (2, 38), (3, 24), (24, 46), (3, 46), (4, 14), (14, 27), (4, 27), (10, 18), (18, 48), (10, 48), (12, 21), (21, 35), (12, 35), (15, 39), (39, 45), (15, 45), (17, 32), (32, 38), (17, 38), (19, 32), (32, 38), (19, 38), (21, 43), (43, 44), (21, 44), (29, 43), (43, 44), (29, 44)]

0 голосов
/ 23 апреля 2019

С небольшим изменением вашего кода вы можете получить список кортежей:

triangles= [[0, 30, 31], [2, 32, 38], [3, 24, 46], [4, 14, 27], [10, 18, 48], [12, 21, 35], [15, 39, 45], [17, 32, 38], [19, 32, 38], [21, 43, 44], [29, 43, 44]]

for [u,v,w] in triangles:
    element = [(u,v),(v,w),(u,w)]
    print(type(element))
    for item in element:
        print(type(item))

будет выглядеть как:

<class 'list'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'list'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
...
0 голосов
/ 23 апреля 2019
triangles =  [[0, 30, 31], [2, 32, 38], [3, 24, 46], [4, 14, 27], [10, 18, 48], [12,21, 35], [15, 39, 45], [17, 32, 38], [19, 32, 38], [21, 43, 44], [29, 43, 44]]
edge = []
for points in triangles:
    edge.append(tuple(points[0:2]))
    edge.append(tuple(points[1:3]))
    edge.append(tuple(points[:3:2]))
print(edge)

Yeils выход:

[(0, 30), (30, 31), (0, 31), (2, 32), (32, 38), (2, 38), (3, 24), (24, 46), (3, 46), (4, 14), (14, 27), (4, 27), (10, 18), (18, 48), (10, 48), (12, 21), (21, 35), (12, 35), (15, 39), (39, 45), (15, 45), (17, 32), (32, 38), (17, 38), (19, 32), (32, 38), (19, 38), (21, 43), (43, 44), (21, 44), (29, 43), (43, 44), (29, 44)]
...