在python中组合特定值

2024-06-08 22:10:31 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的名单

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

请告知。。。。 提前谢谢。。。。。你知道吗


Tags: datalenenvironmentproductgridfilemonetaryentry
2条回答

使用.join将列表项合并为字符串文字,然后使用split将带有re的字符串合并为使用数字的项列表。你知道吗

通过对拆分的项使用列表理解来构建最终列表,以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']

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

相关问题 更多 >