Sie können Liste Verständnis mit islice
und zip
verwenden paarweise über die Liste iterieren:
>>> from itertools import islice
>>> A = [1,10,50,100,500]
>>> [(x, y - 1) for x, y in zip(A, islice(A, 1, None))]
[(1, 9), (10, 49), (50, 99), (100, 499)]
In oben islice
gibt einen Iterator, der auf A
von dem zweiten Element beginnt. islice
wird anstelle der normalen Slicing verwendet, so dass die ursprüngliche Liste nicht kopiert werden muss:
>>> s = list(islice(A, 1, None))
>>> s
[10, 50, 100, 500]
Dann zip
verwendet wird iterable Paare von Elementen aus der ursprünglichen Liste und Iterator zu erstellen:
>>> pairs = list(zip(A, s))
>>> pairs
[(1, 10), (10, 50), (50, 100), (100, 500)]
Und schließlich listet List Verständnis über die Paare, um das Ergebnis zu erstellen:
>>> [(x, y - 1) for x, y in pairs]
[(1, 9), (10, 49), (50, 99), (100, 499)]
Sind Sie sicher, dass Sie nicht 'bisect' stattdessen verwenden sollten? –