我正在尝试在矩阵的第一行和第一列中添加字符串。我创建了如下矩阵。
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
列。
您能对此提供一些反馈吗?
答案 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