【问题标题】:Getting values from a file that are not stored in two other lists从文件中获取未存储在其他两个列表中的值
【发布时间】:2019-04-23 12:35:18
【问题描述】:

我有一个 *.xvg 文件和 3 个不同的组,我想将它们存储在 3 个列表中。前 2 组具有共同特征,因此可以使用 line.startswith() 命令。但是,第三个列表要长得多并且会有所不同,所以我想从不在 list1 和 list2 中的值创建一个列表。

我试过 not in not in,但我猜想读取文件出了点​​问题,因为它没有存储任何值。

for line in open(name):

    if line.startswith(' 4755') or line.startswith(' 4756') or line.startswith(' 4759') or line.startswith(' 4760'):      
        l = line.split()
        arm1.append(float(l[1]))
        sum1= sum(arm1[0:len(arm1)])                


    elif line.startswith(' 4768') or line.startswith(' 4769') or line.startswith(' 4770') or line.startswith(' 4771') or line.startswith(' 4772') or line.startswith(' 4773') or line.startswith(' 4783') :     
        l = line.split()
        arm2.append(float(l[1]))
        sum2= sum(arm2[0:len(arm2)])

    if line not in [arm1] or [arm2]:

        l = line.split()
        arm3.append(float(l[1]))
        sum3= sum(arm3[0:len(arm3)])

【问题讨论】:

    标签: python python-3.x list if-statement


    【解决方案1】:

    效率不是很高,但是您可以通过创建一个组合列表并检查该行是否存在来检查该行是否在任一列表中。

    elif line not in arm1 + arm2 and line.startswith(' '):
            l = line.split()
            arm3.append(float(l[1]))
            sum3= sum(arm3[0:len(arm3)])
    
    

    我在使用此代码行时遇到的问题是我的文档还包含介绍性注释部分,因此未读取浮点值。我只添加了解决问题的elif line not in arm1 + arm2 and line.startswith(' '):

    尽管它很简单,但我希望它对某人有所帮助。

    【讨论】:

    • 也许我的逻辑有点奇怪,因为我是初学者。 @rdas 这给了我 ValueError: invalid literal for float()
    • 检查l[1] 它可能不是你所期望的
    • 你是对的。文件中还包含一个评论部分,也是计算的一部分。现在我只需要弄清楚如何跳过所有这些而不必删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2020-10-08
    • 2020-04-29
    相关资源
    最近更新 更多