2016-06-08 2 views
-1

Вот мой списоксочетания конкретных значений в списке питона

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

Я ищу короткую программу, а не слишком много петель I попробовал цикл

  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

Объедините элементы списка в строковый литерал, используя .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'] 
+0

работал идеально !!!!! .... Спасибо так много ... –

+0

еще один вопрос ..... у меня есть поле испытания это .......... pp = "ПО УМОЛЧАНИЮ БЕЗ ЗАКАЗЧИКА C 00 КРЕДИТЫ L 00 ЗАПРОС I 00 ИМЯ/АДРЕС 5 00 BACKDATE 1-7 E 00 BACKDATE 8-30 F 00 BACKDATE> 30 G 00 ДОСТУП ВСЕ ФУНК. NO *** FLOOR LIMITS *** 0 «...... Я хочу получить результат, подобный этому ... [« БЕЗОПАСНОСТЬ ПО УМОЛЧАНИЮ »,« НЕТ »,« ЗАКАЗЧИК »,« С »,« КРЕДИТ », 'L', 'INQUIRY', 'I', 'NAME/ADDRESS', '5', 'BACKDATE 1-7', 'E', 'BACKDATE 8-30', 'F', 'BACKDATE> 30', ' 'G', 'FLOOR LIMITS', '0'] –

+0

Вы можете начать с 'pp.replace ('*', '') .split()'. Затем измените, объединив элементы из '.split' –

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)]) 
Смежные вопросы