Форум сайта python.su
Никто не сталкичался, в Python есть функция выполняющая обратную операцию zip?
Я понимаю что её не сложно реализовать самому (особенно для частного случая), но правильнее было бы использовать что-то уже готовое или просто хорошо подходящее для это задачи. К тому, если такая встроенная функция есть, вероятно она оптимизированна и будет работать лучше чем на pure python.
..bw
Офлайн
Наверное это и будет ответом на твой вопрос:
http://lists.canonical.org/pipermail/kragen-hacks/2002-February/000322.html
Офлайн
и еше это, кажется получше будет:
http://www.daniweb.com/code/snippet361.html
Офлайн
Вроде нету. Да и как то не особо часто она нужна.
def unzip(ls):
"""
>>> ls1, ls2, ls3 = ['/', '+', '-'], [1, 2, 3], ['a', 'b', 'c']
>>> ls1, ls2, ls3 = unzip(zip(ls1, ls2, ls3))
>>> print ls1, ls2, ls3
['/', '+', '-'] [1, 2, 3] ['a', 'b', 'c']
"""
for x in map(lambda n: map(lambda x: x[n], ls), xrange(len(ls))):
yield x
if __name__ == "__main__":
import doctest
doctest.testmod()
Офлайн
>>> list(unzip(zip(['/', '+', '-', ':'], [1, 2, 3, 4], ['a', 'b', 'c', 'd'])))
Traceback (most recent call last):
File "<input>", line 1, in ?
File "<input>", line 8, in unzip
File "<input>", line 8, in <lambda>
File "<input>", line 8, in <lambda>
IndexError: tuple index out of range
def iunzip(ls):
"""
>>> ls = ['/', '+', '-', ':'], [1, 2, 3, 4], ['a', 'b', 'c', 'd']
>>> list(iunzip(zip(*ls)))
[['/', '+', '-', ':'], [1, 2, 3, 4], ['a', 'b', 'c', 'd']]
>>> list(iunzip([]))
[]
"""
if ls:
for x in map(lambda n: map(lambda x: x[n], ls), range(len(ls[0]))):
yield x
Отредактировано (Авг. 19, 2008 16:40:28)
Офлайн
bwАга, прокосячился :(, неудачный пример для отладки выбрал - количество элементов в списке равно количеству элементов в элементе списка
Так работает:
Офлайн