Как нарезать список с нерегулярными интервалами? - PullRequest
0 голосов
/ 05 сентября 2018

В следующем списке я хочу сделать нарезку так, чтобы мой конечный результат был [1,1.5,2,2.5,4.5,5]. Я пытался получить доступ по индексам, но он выдает ошибку.

`list = [1,1.5,2,2.5,3,3.5,4,4.5,5]
print(list)
print(list[0,1,2,3,7,8])`

Ответы [ 3 ]

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

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

lst = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
indices = (0, 1, 2, 3, 7, 8)
slice = [lst[i] for i in indices]

print(slice) # [1, 1.5, 2, 2.5, 4.5, 5]

Кроме того, не используйте имена, такие как list для ваших переменных, так как это затмевает встроенные функции.

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

Работайте наоборот; вместо выбора несмежного диапазона удалите непрерывный диапазон, который вы не хотите. Вы просто хотите получить исходные list минус индексы 4-6 (включительно), поэтому скопируйте свои list, а затем del индексы, которые вам не нужны:

mylist = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
trimmed = mylist[:]
del trimmed[4:7]
print(trimmed)

В качестве альтернативы, вы можете использовать operator.itemgetter для получения указанных вами индексов, например ::

from operator import itemgetter

mylist = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]
print(itemgetter(0, 1, 2, 3, 7, 8)(mylist))

itemgetter из нескольких значений выведет tuple, поэтому, если вас это беспокоит, вам придется преобразовать обратно в list, например. print(list(itemgetter(0, 1, 2, 3, 7, 8)(mylist))) (и обратите внимание, что выбор изменить имя переменной на mylist позволило получить доступ к конструктору list, что было бы невозможно, если бы вы назвали свою переменную list).

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

Вы не можете использовать список индексов для нарезки или индексирования списка. Вы должны использовать цикл - например, через понимание , или функцию с неявным циклом в нем, например, возвращаемую itemgetter:

>>> lst = [1,1.5,2,2.5,3,3.5,4,4.5,5]
>>> print([lst[i] for i in [0, 1, 2, 3, 7, 8]])
[1, 1.5, 2, 2.5, 4.5, 5]
>>> print(operator.itemgetter(0, 1, 2, 3, 7, 8)(lst))
[1, 1.5, 2, 2.5, 4.5, 5]

Но вы можете сделать что-то подобное с массивами. Вы не можете напрямую использовать шесть индексов (потому что это означало бы многомерное индексирование), но вы можете использовать любой массив, например, список, содержащий эти шесть индексов:

>>> arr = np.array(lst)
>>> print(arr[[0, 1, 2, 3, 7, 8]])
[1.  1.5 2.  2.5 4.5 5. ]

Это объясняется в Индексные массивы в базовом учебнике по индексированию.

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