如何将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
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+
我试过这个,我似乎只接收来自匹配的零,没有其他数字。 –
你能提供更好的样本输入吗?我没有问题用你的示例数据复制这些文件。 – TemporalWolf
'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' –
如果每行只有一个数字,看起来就是这样,那么你为什么使用're.fi ndall'而不是're.search'?你太过复杂了。 – TigerhawkT3
作为一个方面说明,'对于我在范围内(len(files)):x = files [i] ...'实际上是'对于文件中的x:...'。 – DyZ