удаление номеров, которые находятся рядом друг с другом в списке - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть список как

mylist = [75,75,76,77,78,79,154,155,154,156,260,262,263,550,551,551,552]

мне нужно убрать числа, близкие друг к другу, с помощью maxumim из четырех чисел, например:

num-4 <= x <= num +4

список, который мне нужен в конце, должен выглядеть следующим образом:

list = [75,154,260,550]

или

list = [76,156,263,551]

на самом деле не имеет значения, какой номер оставаться в списке, только один из тех, которые находятся рядом.

Я попробовал это, что дало мне:

for i in range(len(l)):
    for j in range(len(l)):
        if i==j or i==j+1 or i==j+2 or i == j+3:
            pp= l.pop(j)
            print(pp)
print(l)


IndexError: pop index out of range

и этот, который не работает так, как мне нужно:

    for q in li:
        for w in li:
            print(q,'////',w)
            if q == w or q ==w+1 or q==w+2 or q==w+3:
                rem = li.remove(w)

спасибо

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Вы можете сделать это, используя набор или список, вам не нужно диктовать.

usedValues = set()
newList = []

for v in myList:
    if v not in usedValues:
        newList.append(v)

        for lv in range(v - 4, v + 5):
            usedValues.add(lv)

print(newList)

Этот метод сохраняет все значения в пределах 4 от каждого значения, которое вы видели до сих пор. Когда вы смотрите на новое значение из myList, вам нужно только проверить, видели ли вы что-то в его приблизительном тесте, проверив usedValues.

0 голосов
/ 06 ноября 2018

Ниже используется groupby для идентификации прогонов из итерации, которые начинаются со значения start и содержат значения, отличающиеся от start не более чем на 4. Затем мы собираем все эти start значений в список.

from itertools import groupby

def runs(difference=4):
    start = None
    def inner(n):
        nonlocal start
        if start is None:
            start = n
        elif abs(start-n) > difference:
            start = n
        return start
    return inner

print([next(g) for k, g in groupby(mylist, runs())])
# [75, 154, 260, 550]

Предполагается, что входные данные уже отсортированы. Если это не так, вам придется отсортировать его: groupby(sorted(mylist), runs()).

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