将嵌套列表理解转换为常规 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)
但输出结果不同。我做错了什么?
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)
现在它们完全相同了。
将 list-comprehension 转换为常规循环的最通用方法如下:
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 = [[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)
但输出结果不同。我做错了什么?
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)
现在它们完全相同了。
将 list-comprehension 转换为常规循环的最通用方法如下:
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)