将元组附加到列表并分配索引
我正在做一个化学程序,需要一个包含所有元素及其对应原子质量单位的列表,类似于下面这样:
Elements = [(H,1),(He,2)...(C,12)]
所有元素和它们的原子质量单位(AMU)都是从一个文件中读取的,每一行的格式是“C 12”。我需要从这个文件中读取信息,把每一行放进一个元组里,然后把这个元组添加到一个列表中。我试过一些代码,但没有成功。
class chemistry:
def readAMU():
infil = open("AtomAMU.txt", "r")
line = infil.readline()
Atoms = list()
Element = ()
while line !="":
line = line.rstrip("\n")
parts = line.split(" ");
element = parts[0]
AMU = parts[1]
element.append(Element)
AMU.append(Element)
Element.append(Atoms)
我这样做对吗?如果不对,我该如何把两个值放进一个元组,给每个值和索引赋值,然后把这个元组添加到列表中呢?
5 个回答
1
字典会是一个更好的数据结构。
with open("AtomAMU.txt") as f:
elements_amu = dict(line.split() for line in f)
可以这样使用:
elements_amu['H'] # gets AMU for H
elements_amu.keys() # list of elements without AMU
3
假设这些行只包含像 C 12
这样的内容,并且用空格分开:
result = []
for line in open('filename.txt'):
result.append(line.split())
或者如果你喜欢用列表推导式的话:
[l.split() for l in open('filename.txt')]
注意,我假设你不在乎是元组还是列表。如果在乎的话,可以转换一下:
[tuple(l.split()) for l in open('filename.txt')]
编辑:谢谢你,Steven。
5
一个更简单的解决方案是使用for循环来遍历文件:
elements = []
with open("AtomAMU.txt") as f:
for line in f:
name, mass = line.split()
elements.append((name, int(mass)))