首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让我们说,在Python中,我需要生成一个2d矩阵,它是n*n。这个列表应该先从左到右,然后从右到左,等等,如何填充?

让我们说,在Python中,我需要生成一个2d矩阵,它是n*n。这个列表应该先从左到右,然后从右到左,等等,如何填充?
EN

Stack Overflow用户
提问于 2022-08-05 11:51:26
回答 4查看 58关注 0票数 -1

假设在Python中,我需要生成一个2d矩阵,即n*n。

代码语言:javascript
复制
for n = 3

[[1,2,3],[4,5,6],[7,8,9]]

这不是问题所在。我的函数需要创建一个2d列表,首先从左到右,然后从右到左,等等.我该怎么做?

榜样;

代码语言:javascript
复制
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]]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-08-05 13:38:34

在这里,我使用了一些很酷的python方法,比如列表切片和三元操作符,让它变得简短和甜蜜。

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2022-08-05 12:00:16

更简单的方法是,每隔一步就反转一次列表。

代码语言:javascript
复制
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)])
票数 2
EN

Stack Overflow用户

发布于 2022-08-05 12:20:46

这里有一个简单但可能不是最好的解决方案:

代码语言:javascript
复制
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]]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73249328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档