У меня есть три примера входных списков кортежей:
bc_lst = [(639, 16), (653, 25), (734, 33), (768, 50), (777, 16), (827, 42), (854, 24), (867, 63), (869, 48), (877, 26), (903, 26), (927, 26), (929, 22), (949, 20), (969, 20), (990, 19), (999, 23), (1010, 19), (1030, 20), (1042, 63), (1049, 20), (1069, 17), (1143, 18), (1158, 18), (1174, 25)]
uc_lst = [(1215, 25), (1293, 25), (1317, 29), (1327, 43), (1346, 26), (1374, 26), (1400, 21), (1420, 21), (1430, 102), (1443, 20), (1465, 19), (1486, 20), (1506, 21), (1528, 20), (1549, 20), (1570, 20), (1591, 20), (1612, 16), (1621, 26), (1632, 21), (1639, 26), (1653, 21)]
dt_lst = [(1566, 39), (1609, 24), (1620, 20), (1650, 38), (1658, 20), (1691, 37), (1701, 20), (1732, 38), (1772, 16), (1785, 19), (1814, 36), (1854, 37), (1854, 38), (1861, 19)]
и буферная переменная buf = 5
.Я хочу сделать эту операцию для bc_lst
, uc_lst
и dt_lst
: проверьте по первому элементу, меньше ли сумма кортежа, чем сумма первого элемента следующего кортежа и буфера, затем удалитеследующий элемент из списка и проверьте следующий элемент списка.
Рассмотрим bc_lst
.Сумма первого кортежа составляет 655
и 653+5 > 655
, поэтому мы сохраняем (653,25)
.Теперь проверьте, является ли 734 +5 > 653+25
, то есть True
, поэтому оставьте (734,33)
.Теперь отметьте 768 +5 > 734+33
, что опять равно True
, поэтому мы проверяем следующий элемент, но 777 +5 > 768+50
равно False
, поэтому мы отбрасываем кортеж (777,16)
.Теперь мы снова проверяем, если 827+5 > 768+50
, что True
, поэтому мы сохраняем (827,42)
.Процесс продолжается.
Это код, который я пробовал:
def func1(a1):
count = 0
while count < len(a1)-1:
if a1[count+1][0] + buf < sum(a1[count]):
del a1[count+1]
count +=1
func1(bc_lst)
Вывод, который я получаю для bc_lst:
[(639, 16), (653, 25), (734, 33), (768, 50), (827, 42), (867, 63), (877, 26), (903, 26), (927, 26), (949, 20), (969, 20), (990, 19), (1010, 19), (1030, 20), (1049, 20), (1069, 17), (1143, 18), (1158, 18), (1174, 25)]
, для uc_lst вывод:
[(1215, 25), (1293, 25), (1317, 29), (1346, 26), (1374, 26), (1400, 21), (1420, 21), (1443, 20), (1465, 19), (1486, 20), (1506, 21), (1528, 20), (1549, 20), (1570, 20), (1591, 20), (1612, 16), (1632, 21), (1653, 21)]
, для dt_lst вывод:
[(1566, 39), (1609, 24), (1650, 38), (1691, 37), (1732, 38), (1772, 16), (1785, 19), (1814, 36), (1854, 37), (1861, 19)]
Принимая во внимание, что желаемый вывод для bc_lst
равен:
[(639, 16), (653, 25), (734, 33), (768, 50), (827, 42), (867, 63), (927, 26), (949, 20), (969, 20), (990, 19), (1010, 19), (1030, 20), (1049, 20), (1069, 17), (1143, 18), (1158, 18), (1174, 25)]
, желаемыйвывод для uc_lst
совпадает с выводом, который я получаю, а желаемый вывод для dt_lst
:
[(1566, 39), (1609, 24), (1650, 38), (1691, 37), (1732, 38), (1772, 16), (1814, 36), (1854, 37)]
Что не так в коде?