在python列表中组合特定值

时间:2016-06-08 23:51:35

标签: python python-2.7

这是我的清单

['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])

请指教.... 在此先感谢.....

2 个答案:

答案 0 :(得分:0)

使用.join将列表项合并为字符串文字,然后使用splitre字符串合并到使用数字的项目列表中。

使用对stripfilter空格字符的拆分项目的列表理解来构建最终列表:

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)])