繁体   English   中英

将嵌套列表理解转换为常规 for 循环

[英]Convert a nested list-comprehension to regular for loops

我想知道如何用常规循环编写这个列表理解:

sep_class = [[x for x, t in zip(X_train, y_train) if t==c] for c in np.unique(y_train)]

我是这样试的:

sep_class = []
for c in np.unique(y_train):
    for x, t in zip(X_train, y_train):
        if t == c:
            sep_class.append(x)

但是输出是不同的。 我究竟做错了什么?

将列表推导式转换为常规循环的最通用方法如下:

l = [f(x) for x in iter]

# converts to:

l = []
for x in iter:
    l.append(f(x))

当您在推导式中嵌套列表创建时,这会变得稍微复杂一些,但遵循相同的逻辑,现在f(x)是 list-comp 本身的翻译。 所以我们有:

l = [[g(x) for x in sub] for sub in iter]

# converts to:

l = []
for sub in iter:
    temp = []
    for x in sub:
        temp.append(g(x))
    l.append(temp)

因此,在您的情况下,只需添加条件,list-comp 将变为:

sep_class = [[x for x, t in zip(X_train, y_train)if t ==c] for c in np.unique(y_train)]

# converts to:

sep_class = []
for c in np.unique(y_train):
    sub = []
    for x, t in zip(X_train, y_train):
        if t == c:
            sub.append(x)
    sep_class.append(sub)
sep_class = []
for c in np.unique(y_train):
    sep_class.append([])
    for x, t in zip(X_train, y_train):
        if t ==c:
            sep_class[c].append(x)

现在它们是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM