用python解决列表理解

用python解决列表理解,python,python-3.x,list,list-comprehension,ranged-loops,Python,Python 3.x,List,List Comprehension,Ranged Loops,所以我一直在学习python中的列表理解,不理解嵌套的逻辑 列表理解在python中工作。考虑下面的代码片段: ####TRADITIONAL EXAMPLE-1### L = [] for i in range(5): for j in range(4): L.append(j) #output of l-> [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3] ####TRADITIONAL EX

所以我一直在学习python中的列表理解,不理解嵌套的逻辑 列表理解在python中工作。考虑下面的代码片段:

####TRADITIONAL EXAMPLE-1###
L = []
for i in range(5):
   for j in range(4):
      L.append(j)

#output of l-> [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]

####TRADITIONAL EXAMPLE-2###
K = []
for i in range(5):
   for j in range(4):
      K.append(i)

#output of k -> [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]
好吧,这一切都有道理,但当我想用列表理解重新创建这些时,逻辑对我来说没有意义。现在考虑这些例子:

###LIST COMPREHENSION EXAMPLE-3####
L1 = [j for j in range(4) for i in range(5)]
#Output of L1 -> [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]

###LIST COMPREHENSION EXAMPLE-4####
K1 = [i for j in range(4) for i in range(5)]
#Output of K1 -> [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

###LIST COMPREHENSION EXAMPLE-5####
Q = [[j for j in range(4)] for i in range(5)]
#Output of Q -> [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

###LIST COMPREHENSION EXAMPLE-6####
Q1 = [[i for j in range(4)] for i in range(5)]
#output of Q1 -> [[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]
所以我不知道为什么,但我希望输出L和L1(例1和例3)是相同的,无论使用传统的方式还是列表理解方式,K和K1(例2和例4)也是一样的,特别是当我比较Q和Q1的输出时(例5和6)。与比较Q1和K1(示例4和6)一样,它们几乎遵循相同的语法,但输出方式不同

我希望我能够澄清我自己的困惑,这是基于与传统方法相比,这些列表理解给出的输出。 我试着在网上搜索并遵循教程,但它们只是列举了一些例子,并没有解释其背后的工作原理或逻辑。我只是不想在不知道为什么输出是这样的背后的原因的情况下把输出搞得一团糟。 谢谢你的帮助:)

所以我不知道为什么,但我希望输出L和L1(例1和例3)是相同的,无论使用传统方式还是列表理解方式

你没有以正确的方式使用列表理解。在您的示例中,
L1
的内部循环和外部循环被交换

L1 = [j for i in range(5) for j in range(4)]
产出:

[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
有关定义具有两个或更多for循环的列表理解的更多信息,请参见答案

记住这一点的最好方法是,列表理解中for循环的顺序基于它们在传统循环方法中出现的顺序。最外层的循环首先出现,然后是内部循环

K和K1也是如此:

K1 = [i for i in range(5) for j in range(4)]
输出:

[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]
特别是当我比较Q和Q1的输出时(如5和6)

但是,当您使用类似于
Q
中的列表理解时,这些示例中没有嵌套for循环。这称为嵌套列表理解。有关嵌套循环理解的信息,请参见