Найти - Пользователи
Полная версия: __builtin__.unzip
Начало » Python для экспертов » __builtin__.unzip
1
bw
Никто не сталкичался, в Python есть функция выполняющая обратную операцию zip?
Я понимаю что её не сложно реализовать самому (особенно для частного случая), но правильнее было бы использовать что-то уже готовое или просто хорошо подходящее для это задачи. К тому, если такая встроенная функция есть, вероятно она оптимизированна и будет работать лучше чем на pure python.

..bw
regall
Наверное это и будет ответом на твой вопрос:

http://lists.canonical.org/pipermail/kragen-hacks/2002-February/000322.html
regall
и еше это, кажется получше будет:
http://www.daniweb.com/code/snippet361.html
PooH
Вроде нету. Да и как то не особо часто она нужна.
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()
bw
>>> 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
regall, речь о другом zip'е.

Так работает:
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
Про doctest не знал, прикольная вещь.

..bw
PooH
bw
Так работает:
Ага, прокосячился :(, неудачный пример для отладки выбрал - количество элементов в списке равно количеству элементов в элементе списка
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