如何在python中创建整数的平方列表?

时间:2018-10-10 13:38:24

标签: python list

在给定整数输入的情况下,我试图创建一个方矩阵。

例如:

router.post('/api/transactions', (req, res) => {
    var productsAvailable = true

    for(var i=0; i<3; i++) {
        ProductM.findOne({name:"not available name"}).exec((err, product) => {
            productsAvailable=false //set to false 
        })

        console.log(productsAvailable) //this show true
    }
})

我的尝试:

# for n=3
m = [[1, 2, 3], [4, 5, 6],[7, 8, 9]] 

打印此结果:

m = list(list(range(1*i,(n+1)*i,i)) for i in range(1,n+1))
print(m)

该数组必须为正方形,并且必须包含连续的整数。

4 个答案:

答案 0 :(得分:1)

这是一种方法:

n = 3
m = [list(range(1+n*i, 1+n*(i+1))) for i in range(n)]

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

主要误解似乎是在发现模式。例如,可以通过1 + 3 * i计算每列中的第一个值,其中i0, 1, 2上进行迭代。对于end的{​​{1}}参数,您只需要在公式中添加 n 即可,我们可以使用标识:

range

顺便说一句,如果您乐于使用第3方库,那么对NumPy来说这是微不足道的:

n*i + n = n*(i+1)

答案 1 :(得分:1)

我宁愿使用numpy(这不是列表,所以我知道它不是必需的OP,但是它仍然很有趣)

def func(n):
    l = np.asarray([i for i in range(1,n**2+1)])
    return l.reshape(n,n)

func(3)
>>> array([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])

还要考虑计算时间:

def func(n):
   t = time.time()
   np.arange(1, n**2 + 1).reshape((n, n))
   t1 = time.time()-t
   t = time.time()
   np.asarray([i for i in range(1,n**2+1)]).reshape(n,n)
   t2 = time.time()-t
   t = time.time()
   [list(range(1+n*i, 1+n*(i+1))) for i in range(n)]
   t3 = time.time()-t
   t = time.time()
   itr = itertools.count(1)  # start counting at 1
   matrix = [[next(itr) for _ in range(n)] for _ in range(n)]
   t4 = time.time()-t
   return [t1,t2,t3,t4]

plt.plot([re[0] for re in res],'r',label = 'numpy')
plt.plot([re[1] for re in res],'b',label = 'asarray')
plt.plot([re[2] for re in res],'m',label = 'list')
plt.plot([re[3] for re in res],'g',label = 'itertool')
plt.legend()
plt.savefig('plt1.png')

将给出200点的下图: enter image description here

对于大型矩阵,直接使用@jpp的numpy解

答案 2 :(得分:1)

您可以使用itertools.count创建一个产生递增数字的迭代器,然后使用list comprehension函数在嵌套的next中推进该迭代器:

import itertools

n = 3

itr = itertools.count(1)  # start counting at 1
matrix = [[next(itr) for _ in range(n)] for _ in range(n)]
# result: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

答案 3 :(得分:0)

您可以使用综合列表。对于零填充矩阵:

import { translate, UserMenu, MenuItemLink, translate } from 'react-admin';

const MyUserMenu = translate(({ translate, ...props }) => 
    <UserMenu {...props}>
        <MenuItemLink
            to="/configuration"
            primaryText={translate("labels.configuration")}
            leftIcon={<SettingsIcon />}
        />
    </UserMenu>

对于具有连续元素的矩阵(从零开始):

mat = [[0 for i in range(N)] for i in range(N)]

对于具有连续元素(基于1)的矩阵:

mat = [[(N*j + i) for i in range(N)] for j in range(N)]

对于方形打印,可以使用:

mat = [[(N*j + i +1) for i in range(N)] for j in range(N)]