选择某个范围的数组元素并定义一个新数组

时间:2016-01-13 13:57:14

标签: python arrays list python-3.x size

我不习惯pyhton,并且想要编写一个函数,该函数将数组x作为输入,并返回一个数组(select),仅包含输入数组的那些条目履行某种财产,例如处于一定范围内。应该执行此操作的功能如下:

def select(x):
    count = 0
    select = []                #0
    for i in range(0,len(x[0])):
      if ( (int(x[4][i])+0.5) > x[4][i] > (int(x[4][i])-0.5)  ):
        select[0][count]=x[0][i] #1
        select[1][count]=x[1][i] #2
        select[2][count]=x[4][i] #3
        count = count + 1
    return select

但是,如果我调用该函数,我会收到以下错误消息:

IndexError: list index out of range

造成它的线是"#1" (以下两行也在制造麻烦)。我想我必须以某种方式定义数组大小。在那种情况下我怎么能在python中做到这一点?我认为select=[]还不够。

亲切的问候

6 个答案:

答案 0 :(得分:1)

select最初是一个空列表。您正在尝试为其当前不存在的元素分配值。

您可能需要select = [[], [], []]

当您尝试在#1,#2和#3中分配它们时,select内部元素的元素也会存在

也许这就是你想要的:

def select(x):
    select = [[] for i in range(3)]    #0 : [[], [], []]
    for i in range(0,len(x[0])):
      if ( (int(x[4][i])+0.5) > x[4][i] > (int(x[4][i])-0.5)  ):
        select[0].append(x[0][i]) #1
        select[1].append(x[1][i]) #2
        select[2].append(x[4][i]) #3
    return select

答案 1 :(得分:1)

作为您自己的过滤方法的替代方法(要实现数组过滤w.r.t.范围),您可以使用以下方法

myRange = [8, 11]
myArr = [6, 7, 8, 9, 10, 11, 12]
myArrFiltered = [x for x in myArr if myRange[0] <= x <= myRange[1]]
print(myArrFiltered)
# [8, 9, 10, 11]

答案 2 :(得分:1)

您的代码不起作用,因为select列表在索引0没有项目。

如果我要实现类似的功能,我会使用filter函数来决定应该选择哪些元素:

ages = [5, 15, 3, 7, 18, 34, 9, 10]

def check_age(age):
    # we could implement all sorts of logic here
    # if we return True, the element is selected
    return age > 10

children_over_ten = filter(check_age, ages)

print(children_over_ten)

如果选择标准足够简单,只需使用列表推导:

ages = [5, 15, 3, 7, 18, 34, 9, 10]
children_over_ten = [x for x in ages if x > 10]
print(children_over_ten)

答案 3 :(得分:1)

您应该尝试使用列表推导,它可用于过滤数据。

例如,使用交互式python会话,

>>> data = [i*0.25 for i in range(0, 21)]
>>> data
[0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 4.25, 4.5, 4.75, 5.0]
>>> [x for x in data if abs(2.5 - x) <= 0.5]
[2.0, 2.25, 2.5, 2.75, 3.0]

选择范围[2.0,3.0]中的数据。

通过数组迭代通常可以在不使用索引的情况下完成,例如

for x in array:
    print(x)

答案 4 :(得分:1)

您需要相应地初始化选择

def select(x):
    count = 0
    select = [[],[],[]]                #0
    for i in range(0,len(x[0])):
      if ( (int(x[4][i])+0.5) > x[4][i] > (int(x[4][i])-0.5)  ):
        select[0]+=[x[0][i]] #1
        select[1]+=[x[1][i]] #2
        select[2]+=[x[4][i]] #3
        count = count + 1
    return select

答案 5 :(得分:1)

或声明select = [],并按以下方式执行:

def select(x):
    count = 0
    select = [] #0
    for i in range(0,len(x[0])):
      if ( (int(x[4][i])+0.5) > x[4][i] > (int(x[4][i])-0.5)  ):
        row = [x[r*r][i] for r in range(3)]
        select.append(row)
        count = count + 1
    return select