【问题标题】:Finding the specific index of a list of large array查找大型数组列表的特定索引
【发布时间】:2019-06-05 00:59:34
【问题描述】:

我有一个不同长度的大型数组列表。我想找到每个大于420的数组的位置。例如[size=(134,7),size=(620,7),size=(800,7),......]

我的代码在下面

for x in x_train:
       if len(x)>420:
           print(x_train.index(x))

我收到了这个错误:

DeprecationWarning: elementwise == comparison failed; this will raise an 
error in the future.

什么是正确的解决方案?

【问题讨论】:

  • 请显示完整的堆栈跟踪和/或确保这将使用这个最少的代码重现。看起来像其他代码或库内部的弃用。

标签: python arrays list indexing


【解决方案1】:

这是一个警告,有些东西已被弃用,但不是错误。我非常怀疑您的代码块是否产生了此警告,可能是某些导入的库或其他代码是原因。

无论如何,关于您的代码,它的效率极低,因为一旦您找到x,您就会在列表中再次寻找它。改为使用enumerate 获取索引:

for i, x in enumerate(x_train):
    if len(x) > 420:
        print(i)

通过列表推导,您可以存储所有索引:

indexes = [i for i, x in enumerate(x_train) if len(x) > 420]

【讨论】:

  • 无论何时需要索引,请使用enumerate。实际上调用.index() 的成本非常高,因此您不必每次都尝试查找索引,而是可以在迭代时包含它。
【解决方案2】:

让我们使用列表推导来解决它。

#Create a sample list of arrays of arbitrary length.
myList = [np.full((134,7), 10), np.full((620,7),0), np.full((800,7),0), np.full((150,7),0), np.full((500,7),0)]

indexes_gt_420 = [i for i in range(len(myList)) if len(myList[i]) > 420]
indexes_gt_420
     [1, 2, 4]

【讨论】:

    猜你喜欢
    • 2018-11-18
    • 2020-01-25
    • 2021-09-07
    • 2011-07-04
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2012-11-05
    相关资源
    最近更新 更多