Найти - Пользователи
Полная версия: Как сделать? [(1, 'a,b'), (2, 'c,d,e')] => [(1,'a'), (1,'b'), (2, 'c')
Начало » Python для новичков » Как сделать? [(1, 'a,b'), (2, 'c,d,e')] => [(1,'a'), (1,'b'), (2, 'c')
1
Kravejs
Собственно, этот код выглядит корявым.

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

        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
# ----------
Studentik
В лоб?
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)
Андрей Светлов
Тогда уж
>>> 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')]
Kravejs
Андрей Светлов
Тогда уж
>>> 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)]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB