У меня есть большой список отсортированных подсписков, содержащих списки, как показано ниже:
biglist = [
[[25368, 22348], [22348, 21234], [21230, 17750], [17754, 15924], [15924, 14490],[14491, 12780]]
[[22390, 21242], [10140, 4260], [4260, 2686], [2686, 438]],
[[14044, 8726], [8762, 4144], [4144, 1420]],
[[5817, 5097], [5590, 5530], [5304, 2729], [5097, 4430], [3450, 2489], [2729, 1676] , [2489, 1618]]
]
для каждого подсписка - в идеале
for sublist in biglist:
for i, element in enumerate(sublist):
abs(element[i][1] - element [i+1][0]) < 10
например, подсписок [[25368, 22348], [22348, 21234], [21230, 17750], [17754, 15924], [15924, 14490], [14491, 12780]
не имеет проблем, потому что:
22348 - 22348 = 0
21234 - 21230 = 4
17750 - 17754 = 4
15924 - 15924 = 0
14490 - 14491 = 1
Итак, если вышеуказанное условие (abs (element [i] [1] - element [i + 1] [0]) <10) не выполняется, то я хочу найти следующее совпадение элемента [i ] [1] в списке, который удовлетворяет вышеуказанному условию - распечатать соответствующий элемент, а затем распечатать пропущенные элементы: </p>
например, в подсписке
[[5817, 5097], [5590, 5530], [5304, 2729], [5094, 4430], [3450, 2489], [2729, 1676], [2489, 1618]]
код должен напечатать что-то вроде этого:
[5817,5097] matches [5094, 4430] within tolerance of 10 - skipped elements: [5590, 5530], [5304, 2729]
[5304, 2729] matches [2729, 1676] within tolerance of 10 - skipped elements: [5094, 4430], [3450, 2489]
[3450, 2489] matches [2489, 1618] within tolerance of 10 - skipped elements: [2729, 1676]
и если совпадений не найдено, выведите:
[5590, 5530] has no match
ОТВЕТ:
Кажется, я получаю желаемые результаты, используя:
for sublist in biglist:
for i, element in list(enumerate(sublist))[:-1]:
found = False
if abs(sublist[i][1] - sublist[i+1][0]) > 10:
for j in range(i+1, len(sublist)):
if abs(sublist[i][1] - sublist[j][0]) < 10:
print(sublist[i], "matches", sublist[j], "within tolerance of 10 - skipped elements:", sublist[i+1:j])
found = True
break
if not found:
print(sublist[i], "has no matches")
но has no matches
дает мне неверный результат:
[22390, 21242] has no matches
[14044, 8726] has no matches
[5817, 5097] matches [5097, 4430] within tolerance of 10 - skipped elements: [[5590, 5530] [5304, 2729]]
[5590, 5530] has no matches
[5304, 2729] matches [2729, 1676] within tolerance of 10 - skipped elements: [[5097, 4430], [3450, 2489]]
[5097, 4430] has no matches
[3450, 2489] matches [2489, 1618] within tolerance of 10 - skipped elements: [[2729, 1676]]
[2729, 1676] has no matches