繁体   English   中英

仅在所有元素为 0 的矩阵的第一行和第一列中添加元素

[英]Adding elements only in first row and first column of a matrix with all elements 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

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

您可以在创建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']
 ]

从你的问题中推断出你想要做什么,因为你不会回复评论,如果你想让你的矩阵看起来像这样(让我们举一个小矩阵示例,以便在这里轻松格式化) -

[[0, 'a', 'b', 'c'], 
 ['x', 0, 0, 0], 
 ['y', 0, 0, 0], 
 ['z', 0, 0, 0]]

其中cation = ['a', 'b', 'c']anion = ['x', 'y', 'z']
然后你会做以下事情 -

mat = [[0 for x in range(len(cation)+1)] for y in range(len(anion)+1)]
mat[0][1:] = cation
for row, anion_element in zip(mat[1:],anion):
    row[0] = anion_element

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM