Нарезка списков 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]) 

4 Solutions collect form web for “Нарезка списков Python с произвольными индексами”

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

Если вы являетесь пользователем Matlab, но хотите использовать Python, проверьте numpy :

 In [37]: import numpy as np In [38]: a = np.arange(100) In [39]: s = a[[5,13,25]] In [40]: s Out[40]: array([ 5, 13, 25]) 

Вот сравнение NumPy и Matlab , и вот таблица общих команд Matlab и их эквивалентов в NumPy .

Нет «готового» способа – так, как вы это делаете, довольно просто, и вы можете его использовать. Если у вас есть много этого кода, вы можете использовать подкласс списка, который будет использовать синтаксис, как и 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] 

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

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

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

  • Нарезка списка с использованием переменной в Python
  • Быстрое индексирование индексов
  • Срезание списка с динамическим индексом в
  • В чем разница между = b и a = b
  • Почему я могу обновить срез списка, но не фрагмент строки в python?
  • Эффективное извлечение памяти перекрывающихся патчей из матрицы
  • Вставить элемент в список Python после каждого n-го элемента
  • Список гарантированно является пустым списком, если список предшествует списку ?
  • Python - лучший язык программирования в мире.