在python中使用for循环向矩阵中添加值

2024-06-23 18:47:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用这个程序的目的是得到一个具有特定值的4x4矩阵,但是由于某种原因,循环将所有内容放在同一行/列中。。。我的密码怎么了?

def matrixH0(k):
    H0=[]
    print H0
    for m in range (0,k):
        for n in range (0,k):
            if abs(m-n)==1:
                H0.append(math.sqrt(n+m+1)/2.)
            else:
                H0.append(0)
        print H0

这是我的输出:

[0,
 0.7071067811865476,
 0,
 0,
 0.7071067811865476,
 0,
 1.0,
 0,
 0,
 1.0,
 0,
 1.224744871391589,
 0,
 0,
 1.224744871391589,
 0]

Tags: in程序目的密码内容forifdef
3条回答

在第一个循环中初始化处的行,并将数字追加到第一个循环索引下的数组中

def matrixH0(k):
    H0=[]
    print H0
    for m in range (0,k):
        H0.append([])
        for n in range (0,k):
            if abs(m-n)==1:
                H0[m].append(math.sqrt(n+m+1)/2.)
            else:
                H0[m].append(0)
        print H0

附加到H0,将值附加到行:

import math
import pprint
def matrixH0(k):
    H0 = []
    for m in range(k):
        # create a new row 
        row = []               
        for n in range(k):
            if abs(m-n)==1:
                row.append(math.sqrt(n+m+1)/2.)
            else:
                row.append(0)
        H0.append(row)
    return H0
pprint.pprint(matrixH0(4))

收益率

[[0, 0.7071067811865476, 0, 0],
 [0.7071067811865476, 0, 1.0, 0],
 [0, 1.0, 0, 1.224744871391589],
 [0, 0, 1.224744871391589, 0]]

顺便说一下,matrixH0也可以使用嵌套的list comprehensions编写:

def matrixH0(k):
    return [[math.sqrt(n+m+1)/2. if abs(m-n)==1 else 0 for n in range(k)]
            for m in range(k)]

您永远不会在代码中创建多维数组,只需附加到单个列表。下面是一个解决方案:

def matrixH0(k):
    H0=[]
    print H0
    for m in range (0,k):
        H0.append([])
        for n in range (0,k):
            if abs(m-n)==1:
                H0[m].append(math.sqrt(n+m+1)/2.)
            else:
                H0[m].append(0)
        print H0

相关问题 更多 >

    热门问题