У меня есть список вроде:
temp_list = [(18, [2773]), (57, [87]), (98, [34]), (135, [5]), (140, [56]), (164, [2151]), (165, [2194, 2101, 2049]), (166, [2298, 2244, 2004]), (167, [2343]), (236, [2752]), (245, [636]), (250, [2290, 2241, 2194, 2146, 2098, 2050, 2001]), (251, [2337, 1952]), (252, [1905, 1857]), (253, [1809]), (254, [1760, 1713, 1661]), (255, [1614]), (256, [1717, 1564, 1522]), (284, [2773]), (303, [2744]), (339, [1842]), (340, [560]), (341, [945]), (342, [1026, 975, 875, 854, 833, 783]), (343, [1093]), (344, [1601, 1477, 1440, 1384, 1362, 1327, 1298, 1237, 1203, 1181, 1130]), (413, [972, 924, 880, 787]), (414, [1067, 1019, 834]), (415, [1299, 1160, 1114]), (416, [1253, 1207]), (487, [555, 491]), (488, [459]), (489, [522]), (490, [2130, 2092, 1791, 1752, 1589]), (491, [2243, 2206, 2168, 2053, 1870, 1831, 1713, 1635, 1513, 1476]), (492, [2358, 2321, 2283, 1673, 1551]), (569, [2046, 1981, 1956]), (570, [2137, 2111, 2073, 2019, 1922]), (619, [535]), (621, [684]), (623, [979]), (624, [1110, 613]), (625, [2060]), (626, [1774]), (690, [1824, 1771, 1721]), (691, [1926, 1902, 1849, 1798, 1746, 1694]), (700, [2743]), (893, [421]), (894, [650, 602, 556, 510, 466]), (895, [746, 697]), (896, [1160]), (898, [524, 479, 435]), (899, [760, 717, 665, 615, 568]), (925, [1273]), (932, [1087]), (936, [1127]), (964, [700, 604, 558]), (965, [2775, 747, 649]), (1018, [2785]), (1039, [426])]
Я хочу последовательно проверить, являются ли первые элементы в элементах кортежа списка смежными с полем 2, и если они смежны, объедините второй элемент изкортеж (который является списком) и добавить их все в другой список, и назначить ключ.
Чтобы упростить, мы проверяем с первого элемента кортежа как 18
в списке и проверяем непосредственно следующий 57
, так как (18+2 >= 57)
равен False
, мы назначаем 18 в качестве ключа и [2773] как значение в другом словаре.
Теперь, начиная с кортежа с первым элементом 164
, следующий кортеж имеет первый элемент 165
, который удовлетворяет (164+2>=165)
, мы переходим к следующему кортежу с первым элементом 166
, который также выполняет смежностьусловие, то же самое для следующего кортежа с первым элементом 167
, но следующий кортеж с первым элементом 236
не выполняет условие смежности как (167+2 >= 236) == False
.Таким образом, мы добавляем все вторые элементы кортежей от [2151]
до [2343]
в новый список и назначаем ключ с наименьшим значением 164
.
Я пробовал этот код:
# First Loop Part
a = []
b = []
for i in temp_list[:-1]:
if temp_list[temp_list.index(i)+1][0] - i[0] >= 2:
a.append(i[0])
b.append(temp_list[temp_list.index(i)+1][0])
c = {}
# Second Loop Part
for i in range(len(a)-1):
k = []
for l in temp_list:
if l[0] == a[i]:
ts = temp_list.index(l)
for l in temp_list:
if l[0] == a[i+1]:
te = temp_list.index(l)
for j in temp_list[ts : te]:
k.append(j[1])
k = [item for sublist in k for item in sublist]
c[a[i]] = k
У меня
a = [18, 57, 98, 135, 140, 167, 236, 245, 256, 284, 303, 344, 416, 492, 570, 619, 621, 626, 691, 700, 896, 899, 925, 932, 936, 965, 1018]
и
b = [57, 98, 135, 140, 164, 236, 245, 250, 284, 303, 339, 413, 487, 569, 619, 621, 623, 690, 700, 893, 898, 925, 932, 936, 964, 1018, 1039]
Ни один из этих двух списков не соответствует требованиям.Список в соответствии с логикой должен быть:
[18, 57, 98, 135, 140, 164, 236, 245, 250, 284, 303, 339, 413, 487, 569, 619, 690, 700, 893, 925, 932, 936, 964, 1018, 1039]
Однако работа по присвоению значений клавишам в словарной части выполнена правильно.Я получаю
c = {18: [2773], 57: [87], 98: [34], 135: [5], 140: [56, 2151, 2194, 2101, 2049, 2298, 2244, 2004], 167: [2343], 236: [2752], 245: [636, 2290, 2241, 2194, 2146, 2098, 2050, 2001, 2337, 1952, 1905, 1857, 1809, 1760, 1713, 1661, 1614], 256: [1717, 1564, 1522], 284: [2773], 303: [2744, 1842, 560, 945, 1026, 975, 875, 854, 833, 783, 1093], 344: [1601, 1477, 1440, 1384, 1362, 1327, 1298, 1237, 1203, 1181, 1130, 972, 924, 880, 787, 1067, 1019, 834, 1299, 1160, 1114], 416: [1253, 1207, 555, 491, 459, 522, 2130, 2092, 1791, 1752, 1589, 2243, 2206, 2168, 2053, 1870, 1831, 1713, 1635, 1513, 1476], 492: [2358, 2321, 2283, 1673, 1551, 2046, 1981, 1956], 570: [2137, 2111, 2073, 2019, 1922], 619: [535], 621: [684, 979, 1110, 613, 2060], 626: [1774, 1824, 1771, 1721], 691: [1926, 1902, 1849, 1798, 1746, 1694], 700: [2743, 421, 650, 602, 556, 510, 466, 746, 697], 896: [1160, 524, 479, 435], 899: [760, 717, 665, 615, 568], 925: [1273], 932: [1087], 936: [1127, 700, 604, 558], 965: [2775, 747, 649]}
Как правильно реализовать логику элементов списка смежности?Любая помощь с первой частью цикла будет очень полезна, так как вторая часть цикла будет работать правильно, если мы правильно получим первый список (a или b).