【问题标题】:Python: Have lines of mixed characters and floats: how to add up the floats?Python:有混合字符和浮点数的行:如何将浮点数相加?
【发布时间】:2017-03-23 21:06:18
【问题描述】:

我有一个看起来像这样的文件(比如“myfile”):

4
1.0 0 0
0.0 1.0 0.0
0.0 0.0 1.0
C  0.0 0.0 -0.5
C  0.0 0.0 0.82
H  0.0 0.9 -1.0
H  0.0 -0.9 -1.0

第一个数字(在本例中为 4)确定有多少行以字符(例如 C 或 H)开头。

我要做的是读取字符后面的数字并用它们做一些数学运算。在这种情况下,我想计算第 5 行和第 6 行、第 5 行和第 7 行以及第 5 行和第 8 行之间的距离(然后是第 6 行和第 7 行之间的距离以及第 6 和第 8 行之间的距离,然后是第 7 行和第 8 行之间的距离)。所以是这样的:

5 和 6:(0.0 - 0.0)^2 + (0.0 - 0.0)^2 + (-0.5 - 0.82)^2

5 和 7:(0.0 - 0.0)^2 + (0.0 - 0.9)^2 + (-0.5 - -1.0)^2

等等。

要做到这一点意味着我需要在行中读取,然后只将数字转换为浮点数,忽略字符。有人对如何做到这一点有任何建议吗?非常初步我有:

with open("myfile.txt", "r") as inputs:
   print lines[4: sum(1 for _ in inputs)]

这让我可以访问这 4 行,每行都是字符串:

['C     0.0   0.0  -0.5\n', 'C     0.0    0.0    0.8\n', 'H     0.000000    0.9   -1.0\n', 'H     0.000000   -0.9   -1.0\n']

但是,我需要弄清楚如何将数字转换为浮点数,然后进行比较。

任何指针都会非常感谢/赞成。谢谢!

【问题讨论】:

    标签: python string floating-point sum


    【解决方案1】:

    可能是这样的:

    lines = ['C     0.0   0.0  -0.5\n', 'C     0.0    0.0    0.8\n', 'H     0.000000    0.9   -1.0\n', 'H     0.000000   -0.9   -1.0\n']
    
    new_lines = [[float(x) for x in line.split()[1:]] for line in lines]
    
    print(new_lines)
    

    结果:

    [[0.0, 0.0, -0.5], [0.0, 0.0, 0.8], [0.0, 0.9, -1.0], [0.0, -0.9, -1.0]]
    

    基本上拆分行的元素(不带参数,因此它会修剪所有额外的空格和换行符以避免空字符串)并删除第一个元素,因为它不代表float

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 2018-02-07
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多