2010-10-28 3 views
1

У меня есть два списка строк, которые имеют следующий формат:Как сделать определенную обработку данных в python?

[x1,x2,x3,x4,...] [y1,y2,y3,y4...] 

Зов это lst1.

lst2 будет:

[x1',x2',x3',x4',...] [y1,y2,y3,y4,...] 

можно предположить, что каждая строка в lst1 имеет соответствие у находится в соответствующем элементе в lst2 и то же число х годов, но было бы здорово, чтобы бросить ошибку, если некоторые х и х 'не имеют одинаковой длины.

Затем я хочу объединить lst1 и lst2, следующим образом:

создать новый список строк, где:

[x1-x1',x2-x2',....] [y1,y2,y3,y4...] 

Я очень любопытно посмотреть, какие решения будут приходить с этим ... Я новичок в python, и я хочу посмотреть, какие разные способы сделать что-то для обработки данных этого типа (что я делаю много).

Спасибо.

+0

Как это [x1, x2, x3 , x4, ...] [y1, y2, y3, y4 ...] список? Разве это не два списка? –

+1

Я запутался в списке с Xs в нем список один? или [x ...] [y ...] list one? то есть список списка списков? – NorthIsUp

+1

Возможно, появился фактический пример предварительно обработанного и почтового обработанного списка? – NorthIsUp

ответ

3
(sub(a,b) for (a,b) in itertools.izip(lst1, lst2)) 

где sub() является то, что вид «вычитая» вы хотите сделать между соответствующими строками

+0

Вы имеете в виду itertools.izip() – mouad

+0

Я посмотрел на itertools.izip. Я не думаю, что это сработает, но идея использования itertools может быть полезна. Я не знал об этом. Благодарю. (Я думаю, вы принимаете другой формат или другую задачу.) – stler

+0

Я думаю, вы имеете в виду [sub (a, b) для (a, b) в itertools.izip (lst1, lst2)], если он хочет список –

0

Основываясь на комментарий выше, что - это на самом деле не вычитание, а тире в строке,

Кроме того, в зависимости от того, как вы хотите иметь дело с результатом? В списке:

["%s-%s"%(a,b) for (a,b) in itertools.izip(lst1, lst2)] 

Или как итератора:

("%s-%s"%(a,b) for (a,b) in itertools.izip(lst1, lst2)) 

Кроме того, вместо itertools.izip вы можете просто использовать zip, но я не знаю последствия этого.

+0

в python 2.x, 'zip()' создает список zip() ed перед возвратом, а 'izip()' возвращает генератор – Javier

0

О, подождите - у вас есть две строки с скобками и элементами в качестве символов в ней? Вот что я понимаю из вашего комментария "" "Список строк, которые выглядят следующим образом:" [a, b, c, d, e] [x, y, z, w, u] ", что означает два подстроки в квадратных скобках - stler 28 мин. назад "" "-

Это совершенно другая вещь, которую вы понимаете из своего вопроса, поскольку списки являются родными объектами в python.

Чтобы обработать строку, как это, вы должны разорвать его на части (с помощью метода разделения) на «]» характер, а затем на запятые:

lst1 = "[a,b,c,d,e] [x,y,z,w,u]" 
lst2 = "[1,2,3,4,5] [x,y,z,w,u]" 

# part the strings in two parts: 
part1, part2 = lst1.split("]",1) 

# isolate the elements in part1: 
part1 = part1.split(",") 
# separate the desired elements from string 2: split at "]", throw "[" away, split at ",": 
part3= lst2.split("]")[0].strip("[").split(",") 

parts_list = [] 

for element1, element2 in zip(part1, part3): 
    if len(element1.strip("[")) != len(element2): 
     raise ValueError("List parts differ in lenght") 
    parts_list.append("%s-%s" % (element1, element2)) 

final_list = ",".join(parts_list) + "]" + part2 
Смежные вопросы