Синтаксис for i in a
дает вам фактические элементы в списке ... например, так:
list_of_strs = ['first', 'second', 'third']
first_letters = [s[0] for s in list_of_strs]
# first_letters == ['f', 's', 't']
То, что вы на самом деле делаете с b = [a[i] for i in a if a[i][0]==1]
, пытается индексировать элемент с каждымэлементов.Но поскольку каждый элемент a
сам по себе является списком, это не будет работать (вы не можете индексировать списки с другими списками)
Что-то вроде этого должно работать:
b = [row for row in a if row[0] == 1]
Бонусные баллы, если вы пишете это как функцию, так что вы можете выбрать, что именно вы хотите фильтровать.
Если вы много работаете с массивами, вы также можете проверить библиотеку numpy .С помощью numpy вы можете делать такие вещи:
import numpy as np
a = np.array([[1,2], [2,3], [3,2], [1,3]])
b = a[a[:,0] == 1]
Последняя строка в основном индексирует исходный массив a
с логическим массивом, определенным в первом наборе квадратных скобок.Он очень гибкий, поэтому вы также можете изменить его, чтобы отфильтровать второй элемент, отфильтровать другие условия (например, > some_number
) и т. Д. И т. Д.