如何在列表中查找列表的索引
How to find the index of a list within a list
基本上我有一个 txt 文件,它是 fortran 模型的输出。输出看起来有点像这样:
Title:Model
Temp(K) Ionic str Rho Phi H2O Ice ...
273.15 4 1.003 1.21 1000 0.00
Species Ini Conc Final Conc Act ....
H 0.0 0.12032 0.59
NH4 3.0 3.00 0.43
Cl 1.0 1.00 0.47
...
Title:Model
Temp(K) Ionic str Rho Phi H2O Ice ...
273.15 4 1.003 1.21 1000 0.00
Species Ini Conc Final Conc Act ....
H 0.0 0.12032 0.59
NH4 3.0 3.00 0.43
Cl 1.0 1.00 0.47
...
每个步骤都会像上面那样添加另一个集合,所以最终我有一个包含 3000 多个步骤的 txt 文件。
所以我想回忆每一步的所有温度。我正在尝试写一些东西来索引所有 'Temp(K)' 出现的点,然后将 1 添加到该索引以获得实际温度的位置。
我的代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
main=[]
main2=[]
count=0
with open('FrOut.txt', 'r') as f:
data=f.readlines()
for line in data:
main.append(line.split(','))
for value in main:
for x in value:
main2.append(x.split())
for value in main2:
for x in value:
if x=='Temp(K)':count+=1
所以显然这不是最优雅的方式,但我对 python 深有体会。那么,如果该列表的第一个值=='Temp(K)'?
,我如何在 list(main2) 中找到列表的索引
铌。之后我使用 np 和 matplot 绘制数据。
这可以使用 python 的 enumerate() 函数来完成。
下面是提取索引的示例。 (而且,只是为了好玩,温度太高了!)
idxs = []
tempature_values = []
for idx, value in enumerate(main2):
# Check if value is not empty & the first element is 'Temp(K)'
if value and value[0] == 'Temp(K)':
idxs.append(idx)
temp_values.append(main2[idx+1][0])
这个怎么样:
temp_rows = []
with open(f, 'rb') as fin:
reader = csv.reader(fin)
for index, row in enumerate(reader):
if 'Temp(K)' in [word for words in row for word in words.split()]:
temp_rows.append(index)
将文件读入列表。
with open('FrOut.txt', 'r') as f:
data=f.readlines()
获取开始温度的行数(使用列表理解,因为它很快):
idx = [n+1 for n, ln in enumerate(data) is ln.startswith('Temp(K)']
再次通过列表理解获取温度。
temps = [float(data[n].split()[0]) for n in idx]
如果需要,您甚至可以将其合并为一个列表理解:
temps = [float(data[n+1].split()[0]) for n, ln in enumerate(data) if ln.startswith('Temp(K)')]
IPython中的示例:
In [1]: text = '''Title:Model
...:
...: Temp(K) Ionic str Rho Phi H2O Ice ...
...: 273.15 4 1.003 1.21 1000 0.00
...:
...: Species Ini Conc Final Conc Act ....
...: H 0.0 0.12032 0.59
...: NH4 3.0 3.00 0.43
...: Cl 1.0 1.00 0.47
...: ...
...:
...: Title:Model
...:
...: Temp(K) Ionic str Rho Phi H2O Ice ...
...: 273.15 4 1.003 1.21 1000 0.00
...:
...: Species Ini Conc Final Conc Act ....
...: H 0.0 0.12032 0.59
...: NH4 3.0 3.00 0.43
...: Cl 1.0 1.00 0.47
...: ...
...: '''
In [2]: data = text.splitlines()
In [3]: idx = [n+1 for n, ln in enumerate(data) if ln.startswith('Temp(K)')]
In [4]: idx
Out[4]: [3, 14]
In [5]: [float(data[n].split()[0]) for n in idx]
Out[5]: [273.15, 273.15]
In [6]: [float(data[n+1].split()[0]) for n, ln in enumerate(data) if ln.startswith('Temp(K)')]
Out[6]: [273.15, 273.15]
基本上我有一个 txt 文件,它是 fortran 模型的输出。输出看起来有点像这样:
Title:Model
Temp(K) Ionic str Rho Phi H2O Ice ...
273.15 4 1.003 1.21 1000 0.00
Species Ini Conc Final Conc Act ....
H 0.0 0.12032 0.59
NH4 3.0 3.00 0.43
Cl 1.0 1.00 0.47
...
Title:Model
Temp(K) Ionic str Rho Phi H2O Ice ...
273.15 4 1.003 1.21 1000 0.00
Species Ini Conc Final Conc Act ....
H 0.0 0.12032 0.59
NH4 3.0 3.00 0.43
Cl 1.0 1.00 0.47
...
每个步骤都会像上面那样添加另一个集合,所以最终我有一个包含 3000 多个步骤的 txt 文件。
所以我想回忆每一步的所有温度。我正在尝试写一些东西来索引所有 'Temp(K)' 出现的点,然后将 1 添加到该索引以获得实际温度的位置。
我的代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
main=[]
main2=[]
count=0
with open('FrOut.txt', 'r') as f:
data=f.readlines()
for line in data:
main.append(line.split(','))
for value in main:
for x in value:
main2.append(x.split())
for value in main2:
for x in value:
if x=='Temp(K)':count+=1
所以显然这不是最优雅的方式,但我对 python 深有体会。那么,如果该列表的第一个值=='Temp(K)'?
,我如何在 list(main2) 中找到列表的索引铌。之后我使用 np 和 matplot 绘制数据。
这可以使用 python 的 enumerate() 函数来完成。
下面是提取索引的示例。 (而且,只是为了好玩,温度太高了!)
idxs = []
tempature_values = []
for idx, value in enumerate(main2):
# Check if value is not empty & the first element is 'Temp(K)'
if value and value[0] == 'Temp(K)':
idxs.append(idx)
temp_values.append(main2[idx+1][0])
这个怎么样:
temp_rows = []
with open(f, 'rb') as fin:
reader = csv.reader(fin)
for index, row in enumerate(reader):
if 'Temp(K)' in [word for words in row for word in words.split()]:
temp_rows.append(index)
将文件读入列表。
with open('FrOut.txt', 'r') as f:
data=f.readlines()
获取开始温度的行数(使用列表理解,因为它很快):
idx = [n+1 for n, ln in enumerate(data) is ln.startswith('Temp(K)']
再次通过列表理解获取温度。
temps = [float(data[n].split()[0]) for n in idx]
如果需要,您甚至可以将其合并为一个列表理解:
temps = [float(data[n+1].split()[0]) for n, ln in enumerate(data) if ln.startswith('Temp(K)')]
IPython中的示例:
In [1]: text = '''Title:Model
...:
...: Temp(K) Ionic str Rho Phi H2O Ice ...
...: 273.15 4 1.003 1.21 1000 0.00
...:
...: Species Ini Conc Final Conc Act ....
...: H 0.0 0.12032 0.59
...: NH4 3.0 3.00 0.43
...: Cl 1.0 1.00 0.47
...: ...
...:
...: Title:Model
...:
...: Temp(K) Ionic str Rho Phi H2O Ice ...
...: 273.15 4 1.003 1.21 1000 0.00
...:
...: Species Ini Conc Final Conc Act ....
...: H 0.0 0.12032 0.59
...: NH4 3.0 3.00 0.43
...: Cl 1.0 1.00 0.47
...: ...
...: '''
In [2]: data = text.splitlines()
In [3]: idx = [n+1 for n, ln in enumerate(data) if ln.startswith('Temp(K)')]
In [4]: idx
Out[4]: [3, 14]
In [5]: [float(data[n].split()[0]) for n in idx]
Out[5]: [273.15, 273.15]
In [6]: [float(data[n+1].split()[0]) for n, ln in enumerate(data) if ln.startswith('Temp(K)')]
Out[6]: [273.15, 273.15]