Распечатать элементы списка с разницей больше, чем значение - PullRequest
0 голосов
/ 05 ноября 2018

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

x = [230, 235, 300, 480, 480, 506, 515, 516]

Я хочу напечатать список с элементами из массива x, с разницей больше, чем значение (допустим, 10). Таким образом, новый список будет содержать только элементы с разницей больше 10 следующего элемента. Выходной список должен содержать элементы, которые имеют более 10 различий со смежным элементом в данном списке. На выходе должен быть список [230, 300, 480, 516]

Я хочу сделать функцию, которая сделает это возможным.

b = [0] + x
t = []
for i in range(len(b)-1):
    if(b[i+1]-b[i]>10):
        t.append(b[i])

print(t)

Я попробовал это. Но я не получаю правильный вывод.

Ответы [ 4 ]

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

Вы можете попробовать это:

a=[230,235,300,480,480,506,515,516]
b=[0]+a
c=[]
for i in range(0,len(b)-1):
        if((b[i+1]-b[i])>10):
                c.append(b[i+1])
print(c)

Выход:

[230, 300, 480, 506]
0 голосов
/ 05 ноября 2018

Использование numpy:

import numpy as np
xarr = np.array(x)
result = xarr[np.where(np.diff(xarr) > 10)[0]+1]

Производит:

array([300, 480, 506])

Я полагаю, это может быть то, что вы ищете?

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

Использование итераторов:

import itertools
def gapFilter(l, gap_value):
  it1, it2 = itertools.tee(l)
  next(it2)
  return [x for x, y in zip(it1, it2) if abs(x-y) >= gap_value]

Здесь у вас есть живой пример

Чтобы получить начальный 0, просто добавьте его в список перед вычислением. Python3 пример:

gapFilter([0, *x], 10)
0 голосов
/ 05 ноября 2018

Попробуйте это:

print([k for k,v in zip(x, x[1:]) if abs(k-v) > 10])

zip твой друг.

Примечание: это работает даже со списком, имеющим значения "вверх" и "вниз" (означающие иногда большое количество, а иногда и маленькое), потому что я использую abs.

Обновление:

l=[(k,v) for k,v in zip(x[1:], x) if abs(k-v) >= 10]
print([list(zip(*l))[1][0]]+list(list(zip(*l))[0]))

Работает, чтобы получить желаемый результат, теперь это ваш друг.

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