Вычислить разницу между конкретным элементом в двух списках, которые находятся в списке - PullRequest
0 голосов
/ 10 октября 2019

У меня есть список, который содержит несколько списков -

[[568, 436, 176, 84, 405],
 [1890, 436, 177, 82, 404],
 [2069, 436, 102, 82, 403],
 [2173, 436, 202, 81, 402],
 [5, 437, 71, 83, 401],
 [78, 437, 182, 83, 400],
 [263, 437, 139, 83, 399],
 [404, 437, 162, 83, 398],
 [747, 437, 170, 82, 397],
 [920, 437, 169, 82, 396],
 [1091, 437, 171, 82, 395],
 [1265, 437, 168, 82, 394],
 [1436, 437, 127, 82, 393],
 [1565, 437, 138, 82, 392],
 [1705, 437, 183, 81, 391],
 [263, 520, 139, 84, 390],
 [2069, 520, 102, 82, 389],
 [2174, 520, 202, 81, 388],
 [1566, 521, 137, 82, 387],
 [1706, 521, 182, 81, 386],
 [1891, 521, 176, 81, 385],
 [3, 522, 73, 82, 384],
 [78, 522, 183, 82, 383],
 [405, 522, 161, 82, 382],
 [569, 522, 176, 82, 381],
 [747, 522, 170, 82, 380],
 [920, 522, 169, 82, 379],
 [1092, 522, 170, 82, 378],
 [1265, 522, 169, 81, 377],
 [1436, 522, 127, 81, 376],
 [2069, 604, 102, 82, 375],
 [2174, 604, 202, 82, 374],
 [1566, 605, 137, 82, 373],
 [1706, 605, 182, 82, 372],
 [1891, 605, 176, 81, 371],
 [747, 606, 171, 82, 370],
 [920, 606, 169, 82, 369],
 [1092, 606, 171, 82, 368],
 [1265, 606, 169, 82, 367],
 [1436, 606, 127, 81, 366],
 [5, 607, 71, 82, 365],
 [78, 607, 183, 82, 364],
 [263, 607, 139, 82, 363],
 [405, 607, 161, 82, 362],
 [569, 607, 176, 82, 361]]

Мне нужно вычислить разницу между вторым элементом каждого списка, и если разница больше 80, разделите список на отдельный списоксписков с добавленным индексом для их разделения

Ожидаемый результат -

Список 1 -

 [568, 436, 176, 84, 405],
 [1890, 436, 177, 82, 404],
 [2069, 436, 102, 82, 403],
 [2173, 436, 202, 81, 402],
 [5, 437, 71, 83, 401],
 [78, 437, 182, 83, 400],
 [263, 437, 139, 83, 399],
 [404, 437, 162, 83, 398],
 [747, 437, 170, 82, 397],
 [920, 437, 169, 82, 396],
 [1091, 437, 171, 82, 395],
 [1265, 437, 168, 82, 394],
 [1436, 437, 127, 82, 393],
 [1565, 437, 138, 82, 392],
 [1705, 437, 183, 81, 391]

Список 2 -

 [263, 520, 139, 84, 390],
 [2069, 520, 102, 82, 389],
 [2174, 520, 202, 81, 388],
 [1566, 521, 137, 82, 387],
 [1706, 521, 182, 81, 386],
 [1891, 521, 176, 81, 385],
 [3, 522, 73, 82, 384],
 [78, 522, 183, 82, 383],
 [405, 522, 161, 82, 382],
 [569, 522, 176, 82, 381],
 [747, 522, 170, 82, 380],
 [920, 522, 169, 82, 379],
 [1092, 522, 170, 82, 378],
 [1265, 522, 169, 81, 377],
 [1436, 522, 127, 81, 376]

Список3 -

 [2069, 604, 102, 82, 375],
 [2174, 604, 202, 82, 374],
 [1566, 605, 137, 82, 373],
 [1706, 605, 182, 82, 372],
 [1891, 605, 176, 81, 371],
 [747, 606, 171, 82, 370],
 [920, 606, 169, 82, 369],
 [1092, 606, 171, 82, 368],
 [1265, 606, 169, 82, 367],
 [1436, 606, 127, 81, 366],
 [5, 607, 71, 82, 365],
 [78, 607, 183, 82, 364],
 [263, 607, 139, 82, 363],
 [405, 607, 161, 82, 362],
 [569, 607, 176, 82, 361]

Это должно повторяться для любого количества присутствующих списков, а не только для трех

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Предположим, ваши данные выше называются a, тогда вы можете добавить, используя условие:

d = {1:[a[0]]}
count = 1
for i in range(len(a)-1):
    if a[i+1][1] - a[i][1] > 80: count += 1
    d[count] = d.get(count,[]) + [a[i]]


{1: [[568, 436, 176, 84, 405],
  [568, 436, 176, 84, 405],
  [1890, 436, 177, 82, 404],
  [2069, 436, 102, 82, 403],
  [2173, 436, 202, 81, 402],
  [5, 437, 71, 83, 401],
  [78, 437, 182, 83, 400],
  [263, 437, 139, 83, 399],
  [404, 437, 162, 83, 398],
  [747, 437, 170, 82, 397],
  [920, 437, 169, 82, 396],
  [1091, 437, 171, 82, 395],
  [1265, 437, 168, 82, 394],
  [1436, 437, 127, 82, 393],
  [1565, 437, 138, 82, 392]],
 2: [[1705, 437, 183, 81, 391],
  [263, 520, 139, 84, 390],
  [2069, 520, 102, 82, 389],
  [2174, 520, 202, 81, 388],
  [1566, 521, 137, 82, 387],
  [1706, 521, 182, 81, 386],
  [1891, 521, 176, 81, 385],
  [3, 522, 73, 82, 384],
  [78, 522, 183, 82, 383],
  [405, 522, 161, 82, 382],
  [569, 522, 176, 82, 381],
  [747, 522, 170, 82, 380],
  [920, 522, 169, 82, 379],
  [1092, 522, 170, 82, 378],
  [1265, 522, 169, 81, 377]],
 3: [[1436, 522, 127, 81, 376],
  [2069, 604, 102, 82, 375],
  [2174, 604, 202, 82, 374],
  [1566, 605, 137, 82, 373],
  [1706, 605, 182, 82, 372],
  [1891, 605, 176, 81, 371],
  [747, 606, 171, 82, 370],
  [920, 606, 169, 82, 369],
  [1092, 606, 171, 82, 368],
  [1265, 606, 169, 82, 367],
  [1436, 606, 127, 81, 366],
  [5, 607, 71, 82, 365],
  [78, 607, 183, 82, 364],
  [263, 607, 139, 82, 363],
  [405, 607, 161, 82, 362]]}
0 голосов
/ 10 октября 2019

Предполагая, что они уже заказаны вторым элементом, вы можете сделать что-то вроде этого.

Ввод:

l = [[568, 436, 176, 84, 405], [1890, 436, 177, 82, 404], [2069, 436, 102, 82, 403], [2173, 436, 202, 81, 402], [5, 437, 71, 83, 401], [78, 437, 182, 83, 400], [263, 437, 139, 83, 399], [404, 437, 162, 83, 398], [747, 437, 170, 82, 397], [920,437, 169, 82, 396], [1091, 437, 171, 82, 395], [1265, 437, 168, 82, 394], [1436, 437, 127, 82, 393], [1565, 437, 138, 82, 392], [1705, 437, 183, 81, 391], [263, 520, 139, 84, 390], [2069, 520, 102, 82, 389], [2174, 520, 202, 81, 388], [1566, 521, 137, 82, 387], [1706, 521, 182, 81, 386], [1891, 521, 176, 81, 385], [3,522, 73, 82, 384], [78, 522, 183, 82, 383], [405, 522, 161, 82, 382], [569, 522, 176, 82, 381], [747, 522, 170, 82, 380], [920, 522, 169, 82, 379], [1092, 522,170, 82, 378], [1265, 522, 169, 81, 377], [1436, 522, 127, 81, 376], [2069, 604, 102, 82, 375], [2174, 604, 202, 82, 374], [1566, 605, 137, 82, 373], [1706, 605, 182, 82, 372], [1891, 605, 176, 81, 371], [747, 606, 171, 82, 370], [920, 606, 169, 82, 369], [1092, 606, 171, 82, 368], [1265, 606, 169, 82, 367], [1436, 606, 127, 81, 366], [5, 607, 71, 82, 365], [78, 607, 183, 82, 364], [263, 607, 139, 82, 363], [405, 607, 161, 82, 362], [569, 607, 176, 82, 361]]

Код:

list_iter = iter(l)
chunks, chunk = [], []
entry = next(list_iter) # Grab the first element
chunk.append(entry) # add it to the first chunk

for x in list_iter:
    if not x[1] < chunk[0][1] + 80:
        chunks.append(chunk)
        chunk = []
    chunk.append(x)
if chunk:
    chunks.append(chunk)

for c in chunks:
    for lst in c:
        print(lst)
    print()

Выход:

[568, 436, 176, 84, 405]
[1890, 436, 177, 82, 404]
[2069, 436, 102, 82, 403]
[2173, 436, 202, 81, 402]
[5, 437, 71, 83, 401]
[78, 437, 182, 83, 400]
[263, 437, 139, 83, 399]
[404, 437, 162, 83, 398]
[747, 437, 170, 82, 397]
[920, 437, 169, 82, 396]
[1091, 437, 171, 82, 395]
[1265, 437, 168, 82, 394]
[1436, 437, 127, 82, 393]
[1565, 437, 138, 82, 392]
[1705, 437, 183, 81, 391]

[263, 520, 139, 84, 390]
[2069, 520, 102, 82, 389]
[2174, 520, 202, 81, 388]
[1566, 521, 137, 82, 387]
[1706, 521, 182, 81, 386]
[1891, 521, 176, 81, 385]
[3, 522, 73, 82, 384]
[78, 522, 183, 82, 383]
[405, 522, 161, 82, 382]
[569, 522, 176, 82, 381]
[747, 522, 170, 82, 380]
[920, 522, 169, 82, 379]
[1092, 522, 170, 82, 378]
[1265, 522, 169, 81, 377]
[1436, 522, 127, 81, 376]

[2069, 604, 102, 82, 375]
[2174, 604, 202, 82, 374]
[1566, 605, 137, 82, 373]
[1706, 605, 182, 82, 372]
[1891, 605, 176, 81, 371]
[747, 606, 171, 82, 370]
[920, 606, 169, 82, 369]
[1092, 606, 171, 82, 368]
[1265, 606, 169, 82, 367]
[1436, 606, 127, 81, 366]
[5, 607, 71, 82, 365]
[78, 607, 183, 82, 364]
[263, 607, 139, 82, 363]
[405, 607, 161, 82, 362]
[569, 607, 176, 82, 361]

Хотя решение для numpy, вероятно, намного чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...