然后,让我们看一下列表理解,但首先让我们从最简单的列表理解入手。
l = [1,2,3,4,5]print [x for x in l] # prints [1, 2, 3, 4, 5]
您可以将其视为与for循环一样的结构,如下所示:
for x in l: print x
现在让我们来看另一个:
l = [1,2,3,4,5]a = [x for x in l if x % 2 == 0]print a # prints [2,4]
与此完全相同:
a = []l = [1,2,3,4,5]for x in l: if x % 2 == 0: a.append(x)print a # prints [2,4]
现在,让我们看一下您提供的示例。
l = [[1,2,3],[4,5,6]]flattened_l = [item for sublist in l for item in sublist]print flattened_l # prints [1,2,3,4,5,6]
要进行列表理解,请从最左边的for循环开始,然后逐步进行操作。在这种情况下,将添加变量item。它将产生以下结果:
l = [[1,2,3],[4,5,6]]flattened_l = []for sublist in l: for item in sublist: flattened_l.append(item)
现在是最后一个
exactly_the_same_as_l = [item for item in sublist for sublist in l]
使用相同的知识,我们可以创建一个for循环,看看它的行为L
for item in sublist: for sublist in l: exactly_the_same_as_l.append(item)
现在,上述方法起作用的唯一原因是,当创建flattened_l时,它也创建了
sublist。这是为什么没有引发错误的一个范围界定的原因。如果您运行时未先定义flattened_l,则会得到一个
NameError



