Удалить элементы в списке, если разница с предыдущим элементом меньше значения - PullRequest
0 голосов
/ 09 января 2020

Приведен список чисел в порядке возрастания. Необходимо оставить только элементы, чтобы получить такой список, в котором разница между элементами была больше или равна определенной величине (в моем случае - 10).

Дано:

list = [10,15,17,21,34,36,42,67,75,84,92,94,103,115]

Цель:

 list=[10,21,34,67,84,94,115]

Ответы [ 3 ]

1 голос
/ 09 января 2020

вы можете использовать while l oop и переменную для отслеживания текущего индекса, который вы просматриваете в данный момент. Поэтому, начиная с индекса 1, проверьте, не меньше ли число в этом индексе минус число в предыдущем индексе, равное 10. Если это так, то удалите этот индекс, но оставьте счетчик индекса таким же, чтобы мы смотрели следующий номер, который сейчас находится в этот индекс. Если разница составляет 10 или более, увеличьте индекс, чтобы посмотреть следующий номер. У меня есть дополнительная строка для печати в l oop, которую вы можете удалить, просто чтобы показать сравнение.

nums = [10, 15, 17, 21, 34, 36, 42, 67, 75, 84, 92, 94, 103, 115]

index = 1
while index < len(nums):
    print(f"comparing {nums[index-1]} with {nums[index]} nums list {nums}")
    if nums[index] - nums[index - 1] < 10:
        del nums[index]
    else:
        index += 1

print(nums)

ВЫХОД

comparing 10 with 15 nums list [10, 15, 17, 21, 34, 36, 42, 67, 75, 84, 92, 94, 103, 115]
comparing 10 with 17 nums list [10, 17, 21, 34, 36, 42, 67, 75, 84, 92, 94, 103, 115]
comparing 10 with 21 nums list [10, 21, 34, 36, 42, 67, 75, 84, 92, 94, 103, 115]
comparing 21 with 34 nums list [10, 21, 34, 36, 42, 67, 75, 84, 92, 94, 103, 115]
comparing 34 with 36 nums list [10, 21, 34, 36, 42, 67, 75, 84, 92, 94, 103, 115]
comparing 34 with 42 nums list [10, 21, 34, 42, 67, 75, 84, 92, 94, 103, 115]
comparing 34 with 67 nums list [10, 21, 34, 67, 75, 84, 92, 94, 103, 115]
comparing 67 with 75 nums list [10, 21, 34, 67, 75, 84, 92, 94, 103, 115]
comparing 67 with 84 nums list [10, 21, 34, 67, 84, 92, 94, 103, 115]
comparing 84 with 92 nums list [10, 21, 34, 67, 84, 92, 94, 103, 115]
comparing 84 with 94 nums list [10, 21, 34, 67, 84, 94, 103, 115]
comparing 94 with 103 nums list [10, 21, 34, 67, 84, 94, 103, 115]
comparing 94 with 115 nums list [10, 21, 34, 67, 84, 94, 115]
[10, 21, 34, 67, 84, 94, 115]
0 голосов
/ 09 января 2020

Эта проблема может быть решена довольно просто путем итерации по вашему начальному набору значений и добавления их в ваш новый список только тогда, когда выполняется условие разности x.

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

values = [10,15,17,21,34,36,42,67,75,84,92,94,103,115]

def foo(elements, distance):
  elements = sorted(elements) # sorting the user input
  new_elements = [elements[0]] # make a new list for output
  for element in elements[1:]: # Iterate over the remaining elements...
    if element - new_elements[-1] >= distance: 
      # this is the condition you described above
      new_elements.append(element)

  return new_elements

print(foo(values, 10))
# >>> [10, 21, 34, 67, 84, 94, 115]
print(foo(values, 5))
# >>> [10, 15, 21, 34, 42, 67, 75, 84, 92, 103, 115]

Несколько других замечаний здесь ...

  • I sorted массив до того, как я его обработал. Возможно, вы не захотите делать это для вашего конкретного приложения, но, похоже, это имеет смысл, так как ваши примеры данных уже отсортированы. Если вы не хотите сортировать данные перед построением списка, вы можете удалить sorted в строке, которую я прокомментировал выше.

  • Я назвал функцию foo потому что я был ленив и не хотел думать о названии. Я настоятельно рекомендую вам дать ему более описательное имя.

0 голосов
/ 09 января 2020

Вы можете создать список в al oop. Начните с первого номера в списке. Следите за последним номером, выбранным в новом списке. Добавляйте элемент в новый список только в том случае, если он отличается от последнего выбранного номера хотя бы на целевую сумму:

my_list = [10,15,17,21,34,36,42,67,75,84,92,94,103,115]

last_num = my_list[0]
new_list = [last_num]

for x in my_list[1:]:
    if x - last_num >= 10:
        new_list.append(x)
        last_num = x

print(new_list) #prints [10, 21, 34, 67, 84, 94, 115]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...