Уведомления

Группа в Telegram: @pythonsu

#1 Май 2, 2011 10:15:09

Kravejs
От:
Зарегистрирован: 2008-07-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать? [(1, 'a,b'), (2, 'c,d,e')] => [(1,'a'), (1,'b'), (2, 'c')

Собственно, этот код выглядит корявым.

Как оптимальнее преобразовать список:
=> ?

        task = self.config[taskName]

sourceText = [(os.path.splitext(os.path.basename(file))[0],
open(file, 'r', encoding=task['Source encoding']).read())
for file in glob.glob(task['Source files'])]

# Возможно, нужно улучшить...
separator = task['Split'] if 'Split' in task.keys() else None
if separator:
s = []
for file, text in sourceText:
s.extend([(file, t) for t in text.split(separator)])
sourceText = s
# ----------



Офлайн

#2 Май 2, 2011 13:55:24

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать? [(1, 'a,b'), (2, 'c,d,e')] => [(1,'a'), (1,'b'), (2, 'c')

В лоб?

arr = [(1, 'a,b'), (2, 'c,d,e')] 
res = []
for ix, s in arr:
for char in s.split(","):
res.append((ix, char))
print(res)



Офлайн

#3 Май 2, 2011 14:34:52

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Как сделать? [(1, 'a,b'), (2, 'c,d,e')] => [(1,'a'), (1,'b'), (2, 'c')

Тогда уж

>>> l = [(1, 'a,b'), (2, 'c,d,e')]
>>> [(a, i) for a, b in l for i in b.split(',')]
[(1, 'a'), (1, 'b'), (2, 'c'), (2, 'd'), (2, 'e')]



Офлайн

#4 Май 2, 2011 14:54:00

Kravejs
От:
Зарегистрирован: 2008-07-27
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать? [(1, 'a,b'), (2, 'c,d,e')] => [(1,'a'), (1,'b'), (2, 'c')

Андрей Светлов
Тогда уж
>>> l = [(1, 'a,b'), (2, 'c,d,e')]
>>> [(a, i) for a, b in l for i in b.split(',')]
[(1, 'a'), (1, 'b'), (2, 'c'), (2, 'd'), (2, 'e')]
Спасибо, Андрей!

Ведь чувствовал, что в Питоне это можно написать изящнее!

Теперь этот код выглядит так:

        separator = task['Split'] if 'Split' in task.keys() else None
if separator: sourceText = \
[(a, c) for a, b in sourceText for c in b.split(separator)]



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version