这是我的清单
['INQ/DATA', 'ENTRY', '1', 'MONETARY', '0', 'TRAN', 'GRID', '0', 'BCR', '0', 'ENVIRONMENT', 'TBL', '0', 'PRODUCT', 'FILE', '0', 'STOP/HOLD', '1', 'QUERY', '0', 'LOOKUP', 'FILE', '0', 'REPORT', 'FILE', '0']
我希望答案设置如下......
['INQ/DATA ENTRY', '1', 'MONETARY', '0', 'TRAN GRID', '0', 'BCR', '0', 'ENVIRONMENT TBL', '0', 'PRODUCT FILE', '0', 'STOP/HOLD', '1', 'QUERY', '0', 'LOOKUP FILE', '0', 'REPORT
FILE', '0']
我正在寻找短程序而不是太多循环 我试过循环
for i in range(len(ar2)-2):
if i < len(ar2)-4 :
if len(ar2[i])>1 and len(ar2[i+1]) > 1:
#print ar2[i]+' '+ar2[i+1]
fll.append(ar2[i]+' '+ar2[i+1])
del ar2[i+1]
else:
fll.append(ar2[i])
else:
fll.append(ar2[i])
请指教.... 在此先感谢.....
答案 0 :(得分:0)
使用.join
将列表项合并为字符串文字,然后使用split
将re
字符串合并到使用数字的项目列表中。
使用对strip
和filter
空格字符的拆分项目的列表理解来构建最终列表:
import re
lst = ['INQ/DATA', 'ENTRY', '1', 'MONETARY', '0', 'TRAN', 'GRID', '0', 'BCR', '0', 'ENVIRONMENT', 'TBL', '0', 'PRODUCT', 'FILE', '0', 'STOP/HOLD', '1', 'QUERY', '0', 'LOOKUP', 'FILE', '0', 'REPORT', 'FILE', '0']
s = " ".join(lst)
p = re.compile(r'(\d+)')
result = [i.strip() for i in p.split(s) if i != '']
# ['INQ/DATA ENTRY', '1', 'MONETARY', '0', 'TRAN GRID', '0', 'BCR', '0', 'ENVIRONMENT TBL', '0', 'PRODUCT FILE', '0', 'STOP/HOLD', '1', 'QUERY', '0', 'LOOKUP FILE', '0', 'REPORT FILE', '0']
答案 1 :(得分:0)
让itertools.groupby为您完成,将str.isdigit
作为关键字传递:
l = ['INQ/DATA', 'ENTRY', '1', 'MONETARY', '0', 'TRAN', 'GRID', '0', 'BCR', '0', 'ENVIRONMENT', 'TBL', '0', 'PRODUCT', 'FILE', '0', 'STOP/HOLD', '1', 'QUERY', '0', 'LOOKUP', 'FILE', '0', 'REPORT', 'FILE', '0']
from itertools import groupby
new = [" ".join(v) for k, v in groupby(l, key=str.isdigit)]
输出:
In [4]: from itertools import groupby
In [5]: [" ".join(v) for k, v in groupby(l, key=str.isdigit)]
Out[5]: ['INQ/DATA ENTRY', '1', 'MONETARY', '0', 'TRAN GRID', '0', 'BCR', '0', 'ENVIRONMENT TBL', '0', 'PRODUCT FILE', '0', 'STOP/HOLD', '1', 'QUERY', '0', 'LOOKUP FILE', '0', 'REPORT FILE', '0']
要使用负数或浮点数,您可以使用辅助函数:
from itertools import groupby
def f(x):
try:
float(x)
return True
except ValueError:
return False
print([" ".join(v) for k, v in groupby(l, key=f)])