如何从python列表中获取值的范围?

时间:2018-08-30 18:12:16

标签: python arrays matlab list indexing

我想执行以下Matlab代码:

indexes=find(data>0.5);
data2=data(indexes(1):indexes(length(indexes))+1);

在Python中,所以我这样做了:

indexes=[x for x in data if x>0.5]
init=indexes[1]
print(indexes)
end=indexes[len(indexes)]+1
data2=data[init:end]

但我收到此错误:

  

end = indexes [len(indexes)] + 1 IndexError:列表索引超出范围

我认为Python中的索引可能与Matlab中的索引不同?

2 个答案:

答案 0 :(得分:2)

您的列表理解不是建立索引列表,而是建立项目本身的列表。您应该使用enumerate在项目旁边生成索引:

ind = [i for i, x in enumerate(data) if x > 0.5]

切片时不必太冗长:

data2 = data[ind[0]: ind[-1]+1] # Matlab's index 1 is Python's index 0

使用len(ind)为索引列表建立索引将为IndexError,因为Python中的索引从0开始(与Matlab不同),并且最后一个索引应使用ind[len(ind)-1]或简单地{{ 1}}。

答案 1 :(得分:0)

len(indexes)将为您提供列表最后一个元素的索引,因此值加1不在列表范围内。

您似乎正在尝试查找列表中具有大于0.5的值的索引,并将这些值放入data2中。这更适合于numpy数组。

import numpy as np
data2 = data[data > 0.5]