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

时间:2018-11-10 05:31:15

标签: python

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

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列。

您能对此提供一些反馈吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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