过滤列表并获取前N个元素

时间:2018-08-11 17:08:18

标签: python list-comprehension

我是python的noobie,但我需要从数据集中绘制一些图像,并且我想为此使用列表推导功能,但不知道如何操作。因此,我使用了while循环,但是也存在访问包含大小为(1080,)的标签的元组的问题,并且出现如下错误消息:

  

IndexError:索引1超出了大小为1的轴0的边界

因此,在我重整了元组之后,一切都很好。我的代码:

i, j = 0, 0
y = np.reshape(Y_train_orig, (1080))
while (j < 5):
    if y[i] == 0 : 
        plt.imshow(X_train_orig[i])
        plt.show()
        j += 1
    i += 1

所以我想知道是否真的需要重塑它,以及是否可以避免使用循环而使用列表理解。会比我的while循环更有效吗?

1 个答案:

答案 0 :(得分:0)

如果没有发布生成Y_train_orig的代码,我们将无法知道其形状,甚至是numpy.ndarray,因此我们无法帮助您进行重塑。

关于主要问题:列表推导方法不适合常规循环(尽管您可以如果确实愿意,可以将某些内容一起砍掉),而只能将结果收集到列表中,可能使用一些过滤器作为好。您想多次执行某些操作(绘图),因此您确实应该使用whilefor循环。

出于完整性考虑,鉴于我不太了解您的变量,这是我编写循环的方法:

count = 0
for y_i, x in zip(y, X_train_orig):
    if y_i == 0: 
        plt.imshow(x)
        plt.show()
        if count == 5:
            break
        count += 1