将元组附加到列表并分配索引

0 投票
5 回答
1589 浏览
提问于 2025-04-17 05:53

我正在做一个化学程序,需要一个包含所有元素及其对应原子质量单位的列表,类似于下面这样:

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)))

撰写回答