удаление нескольких элементов из списка - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно удалить элементы из списка следующим образом: с двумя числами:

num1 = 2
num2 = 5
#These are arbitraty (can be different than 2 or 5) 

и списком:

[[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70], [80, 80], [90, 90], [100, 100]]

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

[[10, 10], [20, 20], [60, 60], [70, 70]]

, чтобы сохранить 1-е и 2-е числа, удалить 3-е, 4-е и 5-е, сохранить 6-е и 7-е,а остальное удаляется

Я пытался создать определенный цикл, который удаляет элементы, но не мог понять, как работать с индексами.

Спасибо за помощь!

Ответы [ 2 ]

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

Я не совсем уверен, что вы имеете в виду, но я предполагаю, что вы имеете в виду это:

  1. Удалить элементы от num1 до num2
  2. Удалить элементы послеnum1 + num2

Просто используйте оператор del и нарезку списка:

>>> mylist = [[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70], [80, 80], [90, 90], [100, 100]]
>>> num1, num2 = 2, 5
>>> mylist = mylist[:num1 + num2]
>>> mylist
[[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70]]
>>> del mylist[num1:num2]
>>> mylist
[[10, 10], [20, 20], [60, 60], [70, 70]]

Пожалуйста, уточните, если вы имеете в виду что-то другое.

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

Вы хотите сохранить первые 2 из 5 для каждых 5 элементов:

data = [[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70],
        [80, 80], [90, 90], [100, 100]]

num1 = 2
num2 = 5  # num2 must be > num1

new_data = [x for i,x in enumerate(data) if i%num2 < num1 ]


print(new_data)

Вывод:

[[10, 10], [20, 20], [60, 60], [70, 70]]

Хитрость заключается в использовании enumerate() и по модулю данного индекса ваших исходных данных на num2 - вы сохраняете те, которые меньше num1.

index :   0,1,2,3,4,5,6,7,8,9, ...
i%num2:   0,1,2,3,4,0,1,2,3,4, ...
keep:     x x - - - x x - - -  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...