在Python中索引具有多个条件的数组?

时间:2016-02-17 22:51:06

标签: python arrays python-2.7 numpy indexing

是否有一种简单的方法可以访问具有多个条件的数组内容?

例如,假设

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

但我只对2到9(含)的值感兴趣

所以我想知道两件事:

1)满足这些条件的元素数量(即a> 1和a <10),因此在本例中它将为8。

2)一个新数组,其值满足这些条件。在这种情况下,

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

我仍然厌恶Python中的索引:/

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:1)

由于问题被标记为numpyarray,这是怎么回事:

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])

答案 3 :(得分: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']

无论如何,您应该将逻辑放入一个函数中,以便于测试和更改