Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数返回的元组不可下标_Python_Python 3.x_Numpy_Nonetype - Fatal编程技术网

Python 函数返回的元组不可下标

Python 函数返回的元组不可下标,python,python-3.x,numpy,nonetype,Python,Python 3.x,Numpy,Nonetype,我写了一个函数,它接受一个值和一个列表。该函数查找该值所在列表的两个值之间的位置;并返回具有上下位置的元组 如果我用一个值调用我的函数,我可以为得到的元组下标。然而,如果我把我的函数放在一个for循环中多次调用它,它会给我以下错误:“NoneType”对象是不可下标的 我是Python新手。我将感谢任何帮助。也许它可以用一种更有效的方式编码 注:yearFractions是一个NumPy数组,其元素中包含浮点数 代码: 将numpy导入为np 年份分数=np.数组([0.227777778,0.

我写了一个函数,它接受一个值和一个列表。该函数查找该值所在列表的两个值之间的位置;并返回具有上下位置的元组

如果我用一个值调用我的函数,我可以为得到的元组下标。然而,如果我把我的函数放在一个for循环中多次调用它,它会给我以下错误:“NoneType”对象是不可下标的

我是Python新手。我将感谢任何帮助。也许它可以用一种更有效的方式编码

注:yearFractions是一个NumPy数组,其元素中包含浮点数

代码:

将numpy导入为np
年份分数=np.数组([0.227777778,0.47777778,0.73333333,0.9888889,1.2416667,1.49166667,1.7472222])
顶点={0.25:0,
0.5 : 0,
1 : 0,
2 : 0,
3 : 0,
4 : 0,
5 : 0,
10 : 0,
15 : 0,
20 : 0,
30 : 0
}
#我的职能
def findPosition(值,值列表):
lastIndex=len(值列表)-1
对于范围内的i(len(valuesList)):
如果值>=值列表[i]和值<值列表[i+1]:
返回i,i+1
elif值>值列表[lastIndex]:
返回lastIndex-1,lastIndex
#在for循环中调用我的函数
对于以分数表示的i:
pos=findPosition(i,列表(顶点.keys()))
打印(位置[0])
在您的函数中:

def findPosition(value, valuesList):
    lastIndex = len(valuesList) -1 
    for i in range(len(valuesList)):
        if value >= valuesList[i] and value < valuesList[i+1]:
            return i, i+1
        elif value > valuesList[lastIndex]:
            return lastIndex-1, lastIndex
def findPosition(值,值列表):
lastIndex=len(值列表)-1
对于范围内的i(len(valuesList)):
如果值>=值列表[i]和值<值列表[i+1]:
返回i,i+1
elif值>值列表[lastIndex]:
返回lastIndex-1,lastIndex
每次循环中都会对elif部分进行评估,我认为您不希望这样做。此外,如果您的某个值小于valuesList中的最小值,则函数将完全忽略发生的情况。numpy数组中的第一个值小于最小限制

我不知道当您得到一个太小的值时,您希望返回什么,因此无法说明如何修复它。

在您的函数中:

def findPosition(value, valuesList):
    lastIndex = len(valuesList) -1 
    for i in range(len(valuesList)):
        if value >= valuesList[i] and value < valuesList[i+1]:
            return i, i+1
        elif value > valuesList[lastIndex]:
            return lastIndex-1, lastIndex
def findPosition(值,值列表):
lastIndex=len(值列表)-1
对于范围内的i(len(valuesList)):
如果值>=值列表[i]和值<值列表[i+1]:
返回i,i+1
elif值>值列表[lastIndex]:
返回lastIndex-1,lastIndex
每次循环中都会对elif部分进行评估,我认为您不希望这样做。此外,如果您的某个值小于valuesList中的最小值,则函数将完全忽略发生的情况。numpy数组中的第一个值小于最小限制


我不知道当您得到一个太小的值时,您希望返回什么,因此无法确定如何修复它。

您需要处理该值小于valuesList中所有元素的情况。其中的情况(假设valuesList按升序排序):

value
您需要处理值小于valuesList中所有元素的情况。其中的情况(假设valuesList按升序排序):

value
稍微修改了代码以加快运行速度

def findPosition(value, valuesList):
    # if key list is not in ascending use "valuesList = valuesList.sort()"
    if value > valuesList[-1]:                             # -1 to access last element
      return len(valuesList), len(valuesList)            # given value greater then last value of list
    else:
      for idx, val in enumerate(valuesList):
        if val>value and idx <= len(valuesList) - 1:     # given value is less then the current value of the list and index
          break;                                         # break to stop the for loop when req value is reached
      return idx, idx+1
def findPosition(值,值列表):
#如果键列表不是升序的,请使用“valuesList=valuesList.sort()
如果值>值列表[-1]:#-1以访问最后一个元素
返回len(valuesList),len(valuesList)#给定值大于列表的最后一个值
其他:
对于idx,枚举中的val(valuesList):

如果val>value和idx稍微修改了代码以加快运行速度

def findPosition(value, valuesList):
    # if key list is not in ascending use "valuesList = valuesList.sort()"
    if value > valuesList[-1]:                             # -1 to access last element
      return len(valuesList), len(valuesList)            # given value greater then last value of list
    else:
      for idx, val in enumerate(valuesList):
        if val>value and idx <= len(valuesList) - 1:     # given value is less then the current value of the list and index
          break;                                         # break to stop the for loop when req value is reached
      return idx, idx+1
def findPosition(值,值列表):
#如果键列表不是升序的,请使用“valuesList=valuesList.sort()
如果值>值列表[-1]:#-1以访问最后一个元素
返回len(valuesList),len(valuesList)#给定值大于列表的最后一个值
其他:
对于idx,枚举中的val(valuesList):

如果val>value和idx,则错误指示正在返回
None
;不是元组。如果您在没有任何一个条件为真的情况下完成了整个循环,则不会返回任何内容。您需要处理这种情况。顺便说一句,
valuesList[i+1]
在到达上一次迭代时会出现错误,因为它不在列表中。我认为您的循环看起来很奇怪-它只会查看第一个元素,并返回1,i+1或lastIndex-1,lastIndex-而不管valuesList的其余部分的内容如何。但是你应该总是从中得到一些东西。@TonySuffolk66如果
elif
else:
,那就是真的。但是如果这两个条件都不成立,循环将继续到嵌套元素。@billy-你不能这样做的原因是因为你没有得到元组-你没有得到元组。由于脱离循环而得到None,而脱离循环则是因为数组中的值0.2227788小于所有顶点,因此无法处理这种情况。错误指示返回的是
None
;不是元组。如果您在没有任何一个条件为真的情况下完成了整个循环,则不会返回任何内容。您需要处理这种情况。顺便说一句,
valuesList[i+1]
在到达上一次迭代时会出现错误,因为它不在列表中。我认为您的循环看起来很奇怪-它只会查看第一个元素,并返回1,i+1或lastIndex-1,lastIndex-而不管valuesList的其余部分的内容如何。但是你应该总是从中得到一些东西。@TonySuffolk66如果
elif
else:
,那就是真的。但是,如果两个条件都不成立,循环将继续到嵌套元素。@billy-您不能这样做的原因