2011-12-20 2 views
-2

Как отделить этот список на куски в Python 2.6, я полностью смущен через 3 часа и нуждаюсь в помощи!Как отделить этот список Python?

['X1', 'P1(0, 0, 0)', 'P2(0, 0, 0)', 'P3(0, 0, 0)', 'X2', 'P1(0, 0, 0)', 'P2(0, 0, 0)', 'P3(0, 0, 0)', 'X3', 'P1(0, 0, 0)', 'P2(0, 0, 0)', 'P3(0, 0, 0)'] 

мне нужно что-то вроде этого для вывода:

X1 P1 0 0 0 
X1 P2 0 0 0 
X1 P3 0 0 0 

X2 P1 0 0 0 
X2 P2 0 0 0 
X2 P3 0 0 0 

X3 P1 0 0 0 
X3 P2 0 0 0 
X3 P3 0 0 0 

Благодарности

ответ

3
for i in xrange(0,12,4): 
     for j in xrange(1,4): 
      sub_list = list[i+j].strip(')').split('(') 
      print list[i], sub_list[0], ' '.join(sub_list[1].split(',')) 
     print '\n' 

даст вам желаемый результат.

+0

Работает отлично и очень легко настроить его, спасибо. –

0

Попробуйте импорт повторно

items = ['X1', 'P1(0, 0, 0)', 'P2(0, 0, 0)', 'P3(0, 0, 0)', 'X2', 'P1(0, 0, 0)', 'P2(0, 0, 0)', 'P3(0, 0, 0)', 'X3', 'P1(0, 0, 0)', 'P2(0, 0, 0)', 'P3(0, 0, 0)'] 

regex = re.compile("(\w\d)\((.+)\)") 

for i in range(0,len(items),4): 
    x = items[i] 
    for j in range(i+1,i+4): 
     s = x 
     r = regex.search(items[j]) 
     subheader = r.groups()[0] 
     subitems = r.groups()[1].split(',') 
     s = s + ' ' + subheader 
     for si in subitems: 
      s = s + ' ' + si 
     print s 
    print 
0

Это следует сделать это:

data = ['X1', 'P1(0, 0, 0)', 
       'P2(0, 0, 0)', 
       'P3(0, 0, 0)', 
     'X2', 'P1(0, 0, 0)', 
       'P2(0, 0, 0)', 
       'P3(0, 0, 0)', 
     'X3', 'P1(0, 0, 0)', 
       'P2(0, 0, 0)', 
       'P3(0, 0, 0)'] 

which_x = None 
for elem in data: 
    if 'X' in elem: 
     which_x = elem 
     print 
     continue 
    elif '(' in elem: 
     pvalue, paren, rest = elem.partition('(') 
     vec = map(int, rest.replace(')', '').split(', ')) 
     print which_x, pvalue, 
     print ' '.join([str(v) for v in vec]) 
    else: 
     raise ValueError('Unknown pattern') 
1

Решение с использованием itertools.groupby и translate:

import itertools 
import string 

table = string.maketrans("(", " ") 
lastX = None 
for k, g in itertools.groupby(yourlist, lambda e: e[0] == 'X'): 
    if k: 
     lastX = next(g) 
     continue 
    for p in g: 
     print lastX, p.translate(table, ",)") 
    print 

Для меня это печатает:

X1 P1 0 0 0 
X1 P2 0 0 0 
X1 P3 0 0 0 

X2 P1 0 0 0 
X2 P2 0 0 0 
X2 P3 0 0 0 

X3 P1 0 0 0 
X3 P2 0 0 0 
X3 P3 0 0 0 

который является желаемым результатом.

Смежные вопросы