首页 > 解决方案 > 仅在所有元素为 0 的矩阵的第一行和第一列中添加元素

问题描述

我正在尝试在矩阵的第一行和第一列中添加字符串。我创建了一个矩阵,如下所示。

cation = ['O', 'I', 'N', 'Cl', 'Se', 'P', 'S', 'Br', 'F', 'Te']
anion =['Hg', 'Bi', 'Pd', 'Ni', 'Be', 'Fe', 'pb', 'Mo', 'Co', 'V', 'Au', 'Sc', 'Rb', 'Mg', 'H', 'Na', 'Al', 'Os', 'Ru', 'Cd', 'Li', 'Tl', 'Ca', 'Cu', 'Ba', 'In', 'Pt', 'Ir', 'Ti', 'Tc', 'Ga', 'W', 'k', 'Rh', 'Cr', 'Zr', 'Ta', 'Sn', 'Hf', 'Ag', 'Sr', 'Y', 'Mn', 'Re', 'Nb', 'Zn', 'Cs']

column = len(cation) +1
row = len(anion) +1
mat = [[ 0 for x in range(column)] for y in range(row)]
print(mat)

for x in range(column):  
    for y in range(row): 
        mat[0][x] = [i for i in cation] 
        mat[x][0] = [j for j in anion]
        #print(mat[0][y])

我在长度上加了 1,因为这样我可以保存所有行和列以在其中添加其他元素。

现在我想cation在第一行和anion第一列中添加元素,所以我的矩阵包含cation第一行和anion列中的所有内容。

您能否就此提供一些反馈?

标签: python

解决方案


您可以在创建mat自身时应用条件,如下所示

mat = [[ 0 if x == 0 and y == 0 else cation[x - 1] if y == 0 else anion[y-1] if x == 0 else 0 for x in range(column)] for y in range(row)]

或者将上面的代码写在一个函数中以避免混淆。

def findElement(x, y):
    if x == 0 and y == 0:
        return 0
    if y == 0:
        return cation[x - 1]
    if x == 0:
        return anion[y-1]
    return 0
mat = [[ findElement(x, y) for x in range(column)] for y in range(row)]

完整的代码是

cation = ['O', 'I', 'N', 'Cl', 'Se', 'P', 'S', 'Br', 'F', 'Te']
anion =['Hg', 'Bi', 'Pd', 'Ni', 'Be', 'Fe', 'pb', 'Mo', 'Co', 'V', 'Au', 'Sc', 'Rb', 'Mg', 'H', 'Na', 'Al', 'Os', 'Ru', 'Cd', 'Li', 'Tl', 'Ca', 'Cu', 'Ba', 'In', 'Pt', 'Ir', 'Ti', 'Tc', 'Ga', 'W', 'k', 'Rh', 'Cr', 'Zr', 'Ta', 'Sn', 'Hf', 'Ag', 'Sr', 'Y', 'Mn', 'Re', 'Nb', 'Zn', 'Cs']

column = len(cation) +1
row = len(anion) +1
# you can use either of the following approach
# mat = [[ 0 if x == 0 and y == 0 else cation[x - 1] if y == 0 else anion[y-1] if x == 0 else 0 for x in range(column)] for y in range(row)]
mat = [[ findElement(x, y) for x in range(column)] for y in range(row)]
print(mat)

格式化输出使用以下代码

import numpy as np
print(np.matrix(mat))

输出是

[
['0' 'O' 'I' 'N' 'Cl' 'Se' 'P' 'S' 'Br' 'F' 'Te']
 ['Hg' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Bi' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Pd' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ni' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Be' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Fe' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['pb' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Mo' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Co' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['V' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Au' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Sc' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Rb' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Mg' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['H' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Na' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Al' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Os' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ru' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Cd' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Li' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Tl' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ca' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Cu' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ba' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['In' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Pt' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ir' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ti' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Tc' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ga' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['W' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['k' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Rh' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Cr' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Zr' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ta' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Sn' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Hf' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Ag' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Sr' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Y' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Mn' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Re' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Nb' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Zn' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ['Cs' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0']
 ]

推荐阅读