假设在Python中,我需要生成一个2d矩阵,即n*n。
for n = 3
[[1,2,3],[4,5,6],[7,8,9]]这不是问题所在。我的函数需要创建一个2d列表,首先从左到右,然后从右到左,等等.我该怎么做?
榜样;
for n = 3
it should generate:
[[1,2,3],[6,5,4],[7,8,9]]
and for n = 4:
[[1,2,3,4],[8,7,6,5],[9,10,11,12],[16,15,14,13]]发布于 2022-08-05 13:38:34
在这里,我使用了一些很酷的python方法,比如列表切片和三元操作符,让它变得简短和甜蜜。
n = 5
primes =
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
matrix = [primes[i:i+n] if i%2==0 else primes[i:i+n][::-1] for i in
range(0,len(primes),n)]
print(matrix)发布于 2022-08-05 12:00:16
更简单的方法是,每隔一步就反转一次列表。
m = []
for line in range(n):
if n%2 == 0:
m.append([*range(line*n,line*n+n)])
else:
m.append([*range(line*n+n,line*n,-1)])发布于 2022-08-05 12:20:46
这里有一个简单但可能不是最好的解决方案:
n = 5
matrix = []
primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
def fill_matrix(arr):
index = 0
for i in range(n):
holder = []
for _ in range(n):
holder.append(primes[index])
index += 1
if i%2 != 0:
arr.append(list(reversed(holder)))
else:
arr.append(holder)
fill_matrix(matrix)
print(matrix)这将输出n=5:[[2, 3, 5, 7, 11], [29, 23, 19, 17, 13], [31, 37, 41, 43, 47], [71, 67, 61, 59, 53], [73, 79, 83, 89, 97]]
https://stackoverflow.com/questions/73249328
复制相似问题