2016-02-17 3 views
1

Есть ли простой способ доступа к содержимому массива с несколькими условиями?Индексирование массивов с несколькими условиями в Python?

Например, позволяет сказать

a=[1,2,3,4,5,6,7,8,9,10] 

Но я заинтересован только в значениях в пределах от 2 до 9 (включительно)

Так что я хочу знать две вещи:

1) Число элементов, удовлетворяющих этим условиям (то есть, где a> 1 и a < 10), поэтому в этом примере это будет 8.

2) Новый массив со значениями tha t удовлетворяют этим условиям. В этом случае,

new_a=[2,3,4,5,6,7,8,9] 

Я до сих пор посасывать индексации в Python:/

+0

Использование списка понимание. – Barmar

+0

вы можете предоставить свою собственную функцию методу сортировки для сравнения двух элементов, по умолчанию используется 'cmp'. –

+1

@PauloScardine Что это касается сортировки? – Barmar

ответ

2
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> a = [1,2,3,4,5,6,7,8,9] 
>>> new_a = [x for x in a if x > 1 and x < 10] 
>>> print new_a 
[2, 3, 4, 5, 6, 7, 8, 9] 
>>> print len(new_a) 
8 
+0

Есть ли что-то не так с нарезкой? – zondo

+0

Первоначально я ответил на вопрос о преподавании о разрезании, но OP фактически не беспокоится об индексах, поэтому этот ответ правильный. –

+0

Вы можете упростить условие до '1 Barmar

1

Встроенная функция фильтра была построена только для этого.

def filter_fun(x): 
     return 1<x<10 
a = range(10) 
new_a = filter(filter_fun, a) 
print a 
print new_a 
print len(new_a) 

Выход:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
[2, 3, 4, 5, 6, 7, 8, 9] 
8 
+0

Я предпочитаю этот ответ, использует встроенная функция – danidee

0

Для некоторых произвольных индексов, вы можете использовать itemgetter построить функцию,

>>> from operator import itemgetter 
>>> interesting_things = itemgetter(2, 3, 4, 5, 6, 7, 8, 9) 
>>> a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] 
>>> interesting_things(a) 
('c', 'd', 'e', 'f', 'g', 'h', 'i', 'j') 

иначе вы можете написать фактическую функцию для дополнительной гибкости

>>> def interesting_things(L): 
...  return [item for i, item in enumerate(L) if 1 < i < 10] 
... 
>>> interesting_things(a) 
['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] 

Независимо от того, вы должны поставить логику в функцию, так что это легко проверить и изменить

+1

Я никого не голосовал. –

1

Поскольку вопрос помечается как numpy и array, как об этом:

In [1]: import numpy as np 

In [2]: a = np.array([1,2,3,4,5,6,7,8,9,10]) 

In [3]: a[(a>1) & (a<10)] 
Out[3]: array([2, 3, 4, 5, 6, 7, 8, 9]) 
+0

Какая чертовщина. Я знал, что вы можете сделать это в MATLAB, но не в Python. Потрясающие. Если бы я мог, я бы поднял голову. Редактировать: Подождите, я могу :) –

Смежные вопросы