如何在python中组合多个列表的元素?

时间:2017-02-22 19:31:06

标签: python list dictionary

以下是开始使用的代码。

#!/usr/bin/python

import glob
import re

path = '/home/lhco/f1/*.cut'

files=glob.glob(path)

i=0
for i in range(len(files)):
    x = files[i]
    h = x
    i += 1
    f = open(h)
    for line in f:
            x = re.findall("([0-9\.[0-9][e][+-][0-9]+)",line)
            pb = map(float, x)

            if "ESC_00" in line: print pb

现在,输出是目录中3个文件的3个数字列表。我想要做的是尝试从第一个列表中取每个第一个元素,第二个等,并将其添加到下一个列表的第一个元素,第二个,等等。我尝试在“pb”上再次使用map和sum和zip但这似乎没什么帮助。 初始输出如下:

[0.08]
[0.009]
[0.0]
[0.0]
[0.0]
[0.0]
[0.03]
[0.005]
[0.0]
[0.0]
[0.0]
[0.0]
[0.08]
[0.008]
[0.0]
[0.0]
[0.0]
[0.0]

是否可以将所有6个数字组的第一个元素相互添加?我需要在这里尝试一下元组吗?

文件示例:

0 EVENTS SURVIVE AUXILIARY CUTS WITH 0.000e+00 PB RESIDUAL CROSS SECTION

EVENT SELECTION EFFICIENCY IS 100.000 PERCENT

CUT_KEY SURVIVE PB_AREA %_LOCAL %_TALLY
ESC_001      38 2.3e-02 007.317 007.317
ESC_002       9 5.5e-03 076.316 078.049
ESC_003       0 0.0e+00 100.000 100.000
ESC_004       0 0.0e+00 000.000 100.000
ESC_005       0 0.0e+00 000.000 100.000
ESC_006       0 0.0e+00 000.000 100.000

1 个答案:

答案 0 :(得分:1)

results = []
for filename in files:
    with open(filename, 'r') as file:
        result = []
        for line in file:
            match = map(float, re.findall("([0-9\.[0-9][e][+-][0-9]+)", line))
            result.extend(match)
    results.append(result)
answer = zip(*results)

这会为每个文件构建result个列表,并列出results个列表,然后将它们压缩以形成answer,这是一个元组列表:

>>> zip(*results)
[(0.08, 0.03, 0.08), 
 (0.009, 0.005, 0.008), 
 (0.0, 0.0, 0.0), 
 (0.0, 0.0, 0.0), 
 (0.0, 0.0, 0.0), 
 (0.0, 0.0, 0.0)]

此外,正则表达式中存在拼写错误(请参阅regex101):

([0-9\.[0-9][e][+-][0-9]+)解析

( [0-9\.[0-9] [e] [+-] [0-9]+ )

当我想你想要的时候:

( [0-9] \. [0-9] [e] [+-] [0-9]+ )

可以简化为(regex101):

\d\.\de[+-]\d+