Python 将嵌套列表转换为常规for循环
我想知道如何使用常规循环编写此列表:Python 将嵌套列表转换为常规for循环,python,list-comprehension,Python,List Comprehension,我想知道如何使用常规循环编写此列表: 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 = [[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)
现在它们是相同的。将列表理解转换为常规循环的最常用方法如下:
l=[f(x)表示iter中的x]
#转换为:
l=[]
对于iter中的x:
l、 附加(f(x))
当您在理解中创建嵌套列表时,这会变得有点复杂,但遵循相同的逻辑,现在f(x)
是列表comp本身的翻译。因此,我们:
l=[[g(x)代表sub中的x]代表iter中的sub]
#转换为:
l=[]
对于iter中的sub:
温度=[]
对于sub中的x:
附加温度(g(x))
l、 附加(临时)
因此,在您的情况下,只需添加条件,列表comp就变成:
sep\u class=[[x代表x,t在zip中(x\u列,y\u列),如果t==c]代表np中的c.unique(y\u列)]
#转换为:
sep_class=[]
对于np中的c。唯一(y_列):
sub=[]
对于拉链中的x,t(x_列车,y_列车):
如果t==c:
附件(x)
sep_类附加(子)
是的,它们应该是,除了sep没有定义这一事实。请阅读此列表。我们正在创建一个包含子列表的列表,而另一个代码似乎将所有内容都附加到同一个列表中。@Tomerikoo我试图问如何分解列表的ComperExtension,但我不介意,我看到了Karl Knechtel的链接并找到了它。这可能会有所帮助:但假设c
的行为类似于范围(…)中的c的。。。如果在第一次迭代中c
是2
,会怎么样?@Tomerikoo从来没有想到过这一点……但你是对的,因为我唯一的(y_序列)是(0,1,2,3,4,5,6,7,8,9),所以这在我的情况下有效。不管怎么说,这是一个糟糕的问题,我发现了。谢谢。事实上这根本不是一个坏问题!我在网站上找不到任何类似的东西,就在今天遇到了一个类似的问题。因此,这实际上是一个可以帮助他人的好问题-你可能只是问错了。。。查看我对您的问题的编辑,并查看我的答案和更多解释