我不习惯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=[]
还不够。
亲切的问候
答案 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