Сопоставление трёх списков
Имеется 3 списка:
a = [12, 12, 12, 12, 1, 1, 1]
b = [20, 21, 22, 23, 200, 201, 202]
c = ['04-04', '05-05', '06-06', '07-07', '008-008', '009-009', '100-100']
Требуется для уникального значения из a вывести сопоставление из b, c равное количеству повторений значений a, т.е.:
uid=12
- 20 04-04
- 21 05-05
- 22 06-06
- 23 07-07
uid=1
- 200 008-008
- 201 009-009
- 202 100-100
вывод уникальных значений из a:
for i in range(0, len(list(set(a)))):
print('uid=' + str(sorted(set(a), key=a.index)[i]))
>>> uid=12
>>> uid=1
количество повторяющихся элементов в a:
for i in range(0, len(list(set(a)))):
print(a.count(sorted(set(a), key=a.index)[i]))
>>> 4
>>> 1
сопоставление b и c:
x = []
for j, o in zip(b, c):
x.append(str(j) + ':' + o)
print(x)
>>> ['20:04-04', '21:05-05', '22:06-06', '23:07-07', '200:008-008', '201:009-009', '202:100-100']
Дальше ступор, как сопоставить ума не приложу
Ответы (3 шт):
Автор решения: вася
→ Ссылка
При условии, что повторяющиеся элементы идут подряд и больше не встречаются:
from collections import Counter
a = [12, 12, 12, 12, 1, 1, 1]
b = [20, 21, 22, 23, 200, 201, 202]
c = ['04-04', '05-05', '06-06', '07-07', '008-008', '009-009', '100-100']
result = {}
start = 0
stop = 0
for key, value in Counter(a).items():
start = stop
stop = start + value
result[key] = list(zip(b[start:stop], c[start:stop]))
print(result)
Автор решения: strawdog
→ Ссылка
import numpy as np
for elem in (np.unique(a)):
print(elem)
for i in [x[0] for x in np.argwhere(np.array(a)==elem)]:
print(f"\t{b[i]}", end="")
print(f"\t{c[i]}")
получим:
1
200 008-008
201 009-009
202 100-100
12
20 04-04
21 05-05
22 06-06
23 07-07
Автор решения: Михаил Муругов
→ Ссылка
In [1]: a = [12, 12, 12, 12, 1, 1, 1]
...: b = [20, 21, 22, 23, 200, 201, 202]
...: c = ['04-04', '05-05', '06-06', '07-07', '008-008', '009-009', '100-100']
In [2]: result = {}
In [3]: for x, y, z in zip(a, b, c):
...: result.setdefault(x, []).append((y, z)) # Группируем
...:
In [4]: for key, values in result.items(): # Выводим
...: print(f"uid={key}")
...: for y, z in values:
...: print(f" - {y} {z}")
...:
Вывод:
uid=12
- 20 04-04
- 21 05-05
- 22 06-06
- 23 07-07
uid=1
- 200 008-008
- 201 009-009
- 202 100-100