计算lis中两个列表中特定元素之间的差异

2024-04-23 16:48:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个列表的列表-

[[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]

这需要对任何数量的列表重复,而不仅仅是三个列表


Tags: 元素列表数量差异
2条回答

假设它们已经由第二个元素排序,您可以这样做。你知道吗

输入:

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解决方案可能要干净得多。你知道吗

假设上面的数据名为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]]}

相关问题 更多 >