如何将python中多元列表的元素结合起来?

如何将python中多元列表的元素结合起来?

问题描述:

这里是开始的代码。如何将python中多元列表的元素结合起来?

#!/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”和总和和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 
+0

如果每行只有一个数字,看起来就是这样,那么你为什么使用're.fi ndall'而不是're.search'?你太过复杂了。 – TigerhawkT3

+0

作为一个方面说明,'对于我在范围内(len(files)):x = files [i] ...'实际上是'对于文件中的x:...'。 – DyZ

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+ 
+0

我试过这个,我似乎只接收来自匹配的零,没有其他数字。 –

+0

你能提供更好的样本输入吗?我没有问题用你的示例数据复制这些文件。 – TemporalWolf

+0

'0活动生存下去的0.000E + 00 PB残余断面 EVENT选择效率AUXILIARY CUTS IS 100.000 PERCENT CUT_KEY \t \t SURVIVE PB_AREA \t%_LOCAL \t _TALLY% ESC_001 \t \t 38 2.3E-02 \t \t 007.317 007.317 ESC_002 \t \t 9 5.5E-03 \t \t 076.316 078.049 ESC_003 \t \t 0 0.0E + 00 \t \t 100.000 100.000 ESC_00 4 \t \t 0 0.0E + 00 \t \t 000.000 100.000 ESC_005 \t \t 0 0.0E + 00 \t \t 000.000 100.000 ESC_006 \t \t 0 0。0e + 00 \t 000.000 \t 100.000' –