Python 在列表中创建并填写每个列表

Python 在列表中创建并填写每个列表,python,list,Python,List,我学会了通过构建一个NxM矩阵并用随机整数填充来创建和管理嵌套列表 我已经通过简单的一行程序解决了这个问题,并努力编写一个全面的解决方案 我把第一个解决方案称为作弊,因为我从这个网站上得到了这个提示,但我并不完全理解它是如何工作的。所以,我试着自己编写一段更详细的代码,这很难,但我不能完全确定我是否正确 最初的解决方案是: from random import randint size_n = int(input("Number of lists N ")) size_m = int(inpu

我学会了通过构建一个NxM矩阵并用随机整数填充来创建和管理嵌套列表

我已经通过简单的一行程序解决了这个问题,并努力编写一个全面的解决方案


我把第一个解决方案称为作弊,因为我从这个网站上得到了这个提示,但我并不完全理解它是如何工作的。所以,我试着自己编写一段更详细的代码,这很难,但我不能完全确定我是否正确

最初的解决方案是:

from random import randint

size_n = int(input("Number of lists N "))
size_m = int(input("Number of elements M "))

matrix = [[randint(1,9) for m in range(size_m)] for n in range(size_n)]
print(matrix)
from random import randint

size_n = int(input("Number of lists N "))
size_m = int(input("Number of elements M "))
matrix = []

for n in range(size_n):
    tmp = []
    for m in range(size_m):
        tmp.append(randint(1,9))
    matrix.append(tmp)

print(matrix)
我很难在循环中创建一个具有正确循环级别的列表。我最终得到了临时矩阵,但我不确定这是否是一个好的解决方案

最终解决办法:

from random import randint

size_n = int(input("Number of lists N "))
size_m = int(input("Number of elements M "))

matrix = [[randint(1,9) for m in range(size_m)] for n in range(size_n)]
print(matrix)
from random import randint

size_n = int(input("Number of lists N "))
size_m = int(input("Number of elements M "))
matrix = []

for n in range(size_n):
    tmp = []
    for m in range(size_m):
        tmp.append(randint(1,9))
    matrix.append(tmp)

print(matrix)
你能帮我理解这项任务的正确解决方案是什么吗


另外,如果代码正常工作,但您认为它可能更漂亮,那么开发人员寻找其他解决方案是否正常

matrix = [[randint(1,9) for m in range(size_m)] for n in range(size_n)]
例如,假设我们的
大小为
5
。然后
范围(大小)
给出

[0, 1, 2, 3, 4]
例如。以0开头的5个连续整数的列表。如果对列表中的每个元素执行某些操作,则会创建另一个大小相同的列表,例如:

>>>[88 for n in range(size_n)]
[88, 88, 88, 88, 88]
当然,你不受简单数字的限制,你基本上可以创造任何东西。例如,空列表:

>>>[[] for n in range(size_n)]
[[], [], [], [], []]
当然,内部列表不必为空,您可以用数字填充它们:

>>>[[1, 2, 3] for n in range(size_n)]
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
或者,您可以在以下内容中使用另一个
范围
表达式:

>>> [[range(1, 4)] for n in range(5)]
[[[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]]]
你可以用同样的方法对这些内部列表进行列表理解:

>>> [[randint(1, 9) for m in range(1, 4)] for n in range(5)]
[[8, 4, 3], [6, 7, 2], [6, 8, 2], [9, 6, 1], [9, 1, 2]]
你可以越走越深,直到你感到无聊或失去记忆:

>>> [[[randint(1, 9) for n in range(1, 5)] for n in range(1, 4)] for n in range(5)]
[[[2, 9, 6, 1], [6, 7, 4, 5], [5, 9, 1, 7]], [[5, 2, 9, 3], [1, 8, 9, 7], [8, 4, 4, 8]], [[4, 4, 7, 9], [7, 1, 4, 2], [7, 8, 7, 3]], [[4, 4, 9, 9], [8, 8, 9, 5], [6, 1, 3, 9]], [[5, 9, 3, 2], [7, 5, 4, 7], [7, 7, 4, 3]]]
嵌套列表理解通常是正确的解决方案,一旦习惯了符号,它们就很容易阅读。嵌套循环也可以

寻找更好的方法重新编写您的工作代码没有什么错(我想说,不去看是不对的),除非您对它产生了不健康的困扰

对于Python3,范围(5)
实际上并没有直接给出
[0,1,2,3,4]
,但是对于这个任务,它实际上是一样的

例如,假设我们的
大小为
5
。然后
范围(大小)
给出

[0, 1, 2, 3, 4]
例如。以0开头的5个连续整数的列表。如果对列表中的每个元素执行某些操作,则会创建另一个大小相同的列表,例如:

>>>[88 for n in range(size_n)]
[88, 88, 88, 88, 88]
当然,你不受简单数字的限制,你基本上可以创造任何东西。例如,空列表:

>>>[[] for n in range(size_n)]
[[], [], [], [], []]
当然,内部列表不必为空,您可以用数字填充它们:

>>>[[1, 2, 3] for n in range(size_n)]
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
或者,您可以在以下内容中使用另一个
范围
表达式:

>>> [[range(1, 4)] for n in range(5)]
[[[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]], [[1, 2, 3]]]
你可以用同样的方法对这些内部列表进行列表理解:

>>> [[randint(1, 9) for m in range(1, 4)] for n in range(5)]
[[8, 4, 3], [6, 7, 2], [6, 8, 2], [9, 6, 1], [9, 1, 2]]
你可以越走越深,直到你感到无聊或失去记忆:

>>> [[[randint(1, 9) for n in range(1, 5)] for n in range(1, 4)] for n in range(5)]
[[[2, 9, 6, 1], [6, 7, 4, 5], [5, 9, 1, 7]], [[5, 2, 9, 3], [1, 8, 9, 7], [8, 4, 4, 8]], [[4, 4, 7, 9], [7, 1, 4, 2], [7, 8, 7, 3]], [[4, 4, 9, 9], [8, 8, 9, 5], [6, 1, 3, 9]], [[5, 9, 3, 2], [7, 5, 4, 7], [7, 7, 4, 3]]]
嵌套列表理解通常是正确的解决方案,一旦习惯了符号,它们就很容易阅读。嵌套循环也可以

寻找更好的方法重新编写您的工作代码没有什么错(我想说,不去看是不对的),除非您对它产生了不健康的困扰


对于Python3
range(5)
实际上并没有直接给出
[0,1,2,3,4]
,但是对于这个任务,它实际上是一样的。

关于列表理解的欺骗是什么?回答你的另一个问题,无论这是否正常,我不认为寻找更优雅的解决方案是错误的。你原来的解决方案有什么问题吗?我从这个网站上得到了这个提示,但我不完全理解它是如何工作的。因此,我试着自己编写一段更详细的代码,这很难,但我不能完全确定我是否正确。您的第二次尝试完成了与第一次相同的事情,但是使用了传统的循环,而不是理解。它不再“详细”(不管这意味着什么)。它只是垂直的,而不是水平的。“如果代码正常工作,开发人员寻找另一种解决方案,但您认为它可能更漂亮,这是正常的吗?”是的,这是一项重要的活动。它甚至有一个名字:。关于列表理解的欺骗是什么?回答你的另一个问题,无论这是否正常,我不认为寻找更优雅的解决方案是错误的。你原来的解决方案有什么问题吗?我从这个网站上得到了这个提示,但我不完全理解它是如何工作的。因此,我试着自己编写一段更详细的代码,这很难,但我不能完全确定我是否正确。您的第二次尝试完成了与第一次相同的事情,但是使用了传统的循环,而不是理解。它不再“详细”(不管这意味着什么)。它只是垂直的,而不是水平的。“如果代码正常工作,开发人员寻找另一种解决方案,但您认为它可能更漂亮,这是正常的吗?”是的,这是一项重要的活动。它甚至有一个名字:。