Подтвердить что ты не робот

Нарезка списков Python с произвольными индексами

Есть ли лучший способ извлечь произвольные индексы из списка в python?

Используемый мной метод:

a = range(100)
s = [a[i] for i in [5,13,25]]

Где a - массив, который я хочу нарезать, а [5,13,25] - это те элементы, которые я хочу получить. Это кажется гораздо более подробным, чем эквивалент Matlab:

a = 0:99;
s = a([6,14,26])
4b9b3361

Ответ 1

>>> from operator import itemgetter
>>> a = range(100)
>>> itemgetter(5,13,25)(a)
(5, 13, 25)

Ответ 3

Нет "готового" способа - так, как вы это делаете, довольно просто, и вы можете его использовать. Если у вас есть много этого кода, вы можете использовать подкласс списка, который будет использовать синтаксис, как и matlabs, - это может быть сделано в нескольких строках кода, основное бремя - это то, что вам придется работать всегда используйте этот новый класс вместо встроенных списков.

class MyList(list):
    def __getitem__(self, index):
        if not isinstance(index, tuple):
            return list.__getitem__(self, index)
        return [self[i] for i in index]

И на консоли:

>>> m = MyList(i * 3 for i in range(100))
>>> m[20, 25,60]
[60, 75, 180]

Ответ 4

Похоже, вы бы сделали:

    a = list(range(99)) 
    s = [a[5], a[13], a[25]] 

похоже, что он почти идентичен версии matlab.