【问题标题】:Solving list comprehensions in python [duplicate]解决python中的列表推导[重复]
【发布时间】:2020-05-18 09:18:04
【问题描述】:

所以我一直在学习 Python 中的列表推导,但不了解嵌套的逻辑 列表推导在 python 中工作。考虑以下 sn-ps 代码:

####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)一样,它们几乎遵循相同的语法,但输出却大不相同。

我希望我能够根据这些列表理解中的每一个与传统方式相比的输出来澄清我在这里的困惑。 我尝试在线搜索并遵循教程,但它们只是陈述示例,而不是解释其背后的工作或逻辑。我只是不想在不知道输出为何如此的原因的情况下搞砸输出。 感谢您的帮助:)

【问题讨论】:

    标签: python python-3.x list list-comprehension ranged-loops


    【解决方案1】:

    所以我不知道为什么,但我希望输出 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]
    

    请参阅this 答案以了解有关定义具有两个或多个 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 循环。它被称为嵌套列表理解。有关嵌套循环理解的信息,请参阅 this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2018-06-22
      • 2014-01-28
      • 1970-01-01
      • 2012-05-04
      • 2013-05-31
      • 2017-07-07
      相关资源
      最近更新 更多