|
Packit |
562c7a |
# ticket: 235
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
__doc__ = u"""
|
|
Packit |
562c7a |
>>> class FakeSeq(object):
|
|
Packit |
562c7a |
... def __init__(self, length):
|
|
Packit |
562c7a |
... self._values = list(range(1,length+1))
|
|
Packit |
562c7a |
... def __getitem__(self, i):
|
|
Packit |
562c7a |
... return self._values[i]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> unpack( FakeSeq(2) )
|
|
Packit |
562c7a |
(1, 2)
|
|
Packit |
562c7a |
>>> unpack_recursive( FakeSeq(4) )
|
|
Packit |
562c7a |
(1, [2, 3], 4)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack(l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack([1,2])
|
|
Packit |
562c7a |
(1, 2)
|
|
Packit |
562c7a |
>>> unpack('12')
|
|
Packit |
562c7a |
('1', '2')
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, b = l
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_list(list l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_list([1,2])
|
|
Packit |
562c7a |
(1, 2)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, b = l
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_tuple(tuple t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_tuple((1,2))
|
|
Packit |
562c7a |
(1, 2)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, b = t
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_single(l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_single([1])
|
|
Packit |
562c7a |
[1]
|
|
Packit |
562c7a |
>>> unpack_single('1')
|
|
Packit |
562c7a |
['1']
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*a, = l
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_tuple_single(tuple t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_tuple_single((1,))
|
|
Packit |
562c7a |
[1]
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*a, = t
|
|
Packit |
562c7a |
return a
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def assign():
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> assign()
|
|
Packit |
562c7a |
(1, [2, 3, 4], 5)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*a, b = 1,2,3,4,5
|
|
Packit |
562c7a |
assert a+[b] == [1,2,3,4,5], (a,b)
|
|
Packit |
562c7a |
a, *b = 1,2,3,4,5
|
|
Packit |
562c7a |
assert [a]+b == [1,2,3,4,5], (a,b)
|
|
Packit |
562c7a |
[a, *b, c] = 1,2,3,4,5
|
|
Packit |
562c7a |
return a,b,c
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_into_list(l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_into_list('123')
|
|
Packit |
562c7a |
('1', ['2'], '3')
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
[*a, b] = l
|
|
Packit |
562c7a |
assert a+[b] == list(l), repr((a+[b],list(l)))
|
|
Packit |
562c7a |
[a, *b] = l
|
|
Packit |
562c7a |
assert [a]+b == list(l), repr(([a]+b,list(l)))
|
|
Packit |
562c7a |
[a, *b, c] = l
|
|
Packit |
562c7a |
return a,b,c
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_into_tuple(t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_into_tuple('123')
|
|
Packit |
562c7a |
('1', ['2'], '3')
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
(*a, b) = t
|
|
Packit |
562c7a |
assert a+[b] == list(t), repr((a+[b],list(t)))
|
|
Packit |
562c7a |
(a, *b) = t
|
|
Packit |
562c7a |
assert [a]+b == list(t), repr(([a]+b,list(t)))
|
|
Packit |
562c7a |
(a, *b, c) = t
|
|
Packit |
562c7a |
return a,b,c
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_in_loop(list_of_sequences):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_in_loop([(1,2), (1,2,3), (1,2,3,4)])
|
|
Packit |
562c7a |
1
|
|
Packit |
562c7a |
([1], 2)
|
|
Packit |
562c7a |
([1, 2], 3)
|
|
Packit |
562c7a |
([1, 2, 3], 4)
|
|
Packit |
562c7a |
2
|
|
Packit |
562c7a |
(1, [2])
|
|
Packit |
562c7a |
(1, [2, 3])
|
|
Packit |
562c7a |
(1, [2, 3, 4])
|
|
Packit |
562c7a |
3
|
|
Packit |
562c7a |
(1, [], 2)
|
|
Packit |
562c7a |
(1, [2], 3)
|
|
Packit |
562c7a |
(1, [2, 3], 4)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
print 1
|
|
Packit |
562c7a |
for *a,b in list_of_sequences:
|
|
Packit |
562c7a |
print((a,b))
|
|
Packit |
562c7a |
print 2
|
|
Packit |
562c7a |
for a,*b in list_of_sequences:
|
|
Packit |
562c7a |
print((a,b))
|
|
Packit |
562c7a |
print 3
|
|
Packit |
562c7a |
for a,*b, c in list_of_sequences:
|
|
Packit |
562c7a |
print((a,b,c))
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_recursive(t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_recursive((1,2,3,4))
|
|
Packit |
562c7a |
(1, [2, 3], 4)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*(a, *b), c = t
|
|
Packit |
562c7a |
return a,b,c
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_typed(t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_typed((1,2))
|
|
Packit |
562c7a |
([1], 2)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef list a
|
|
Packit |
562c7a |
*a, b = t
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_right(l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_right('')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_right('1')
|
|
Packit |
562c7a |
('1', [])
|
|
Packit |
562c7a |
>>> unpack_right([1])
|
|
Packit |
562c7a |
(1, [])
|
|
Packit |
562c7a |
>>> unpack_right('12')
|
|
Packit |
562c7a |
('1', ['2'])
|
|
Packit |
562c7a |
>>> unpack_right([1,2])
|
|
Packit |
562c7a |
(1, [2])
|
|
Packit |
562c7a |
>>> unpack_right('123')
|
|
Packit |
562c7a |
('1', ['2', '3'])
|
|
Packit |
562c7a |
>>> unpack_right([1,2,3])
|
|
Packit |
562c7a |
(1, [2, 3])
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, *b = l
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_right_list(list l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_right_list([])
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_right_list([1])
|
|
Packit |
562c7a |
(1, [])
|
|
Packit |
562c7a |
>>> unpack_right_list([1,2])
|
|
Packit |
562c7a |
(1, [2])
|
|
Packit |
562c7a |
>>> unpack_right_list([1,2,3])
|
|
Packit |
562c7a |
(1, [2, 3])
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, *b = l
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_right_tuple(tuple t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_right_tuple(())
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_right_tuple((1,))
|
|
Packit |
562c7a |
(1, [])
|
|
Packit |
562c7a |
>>> unpack_right_tuple((1,2))
|
|
Packit |
562c7a |
(1, [2])
|
|
Packit |
562c7a |
>>> unpack_right_tuple((1,2,3))
|
|
Packit |
562c7a |
(1, [2, 3])
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, *b = t
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_left(l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_left('')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_left('1')
|
|
Packit |
562c7a |
([], '1')
|
|
Packit |
562c7a |
>>> unpack_left([1])
|
|
Packit |
562c7a |
([], 1)
|
|
Packit |
562c7a |
>>> unpack_left('12')
|
|
Packit |
562c7a |
(['1'], '2')
|
|
Packit |
562c7a |
>>> unpack_left([1,2])
|
|
Packit |
562c7a |
([1], 2)
|
|
Packit |
562c7a |
>>> unpack_left('123')
|
|
Packit |
562c7a |
(['1', '2'], '3')
|
|
Packit |
562c7a |
>>> unpack_left([1,2,3])
|
|
Packit |
562c7a |
([1, 2], 3)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*a, b = l
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_left_list(list l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_left_list([])
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_left_list([1])
|
|
Packit |
562c7a |
([], 1)
|
|
Packit |
562c7a |
>>> unpack_left_list([1,2])
|
|
Packit |
562c7a |
([1], 2)
|
|
Packit |
562c7a |
>>> unpack_left_list([1,2,3])
|
|
Packit |
562c7a |
([1, 2], 3)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*a, b = l
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_left_tuple(tuple t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_left_tuple(())
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_left_tuple((1,))
|
|
Packit |
562c7a |
([], 1)
|
|
Packit |
562c7a |
>>> unpack_left_tuple((1,2))
|
|
Packit |
562c7a |
([1], 2)
|
|
Packit |
562c7a |
>>> unpack_left_tuple((1,2,3))
|
|
Packit |
562c7a |
([1, 2], 3)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*a, b = t
|
|
Packit |
562c7a |
return a,b
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_middle(l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_middle('')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_middle([])
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_middle(())
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_middle('1')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 1 value to unpack
|
|
Packit |
562c7a |
>>> unpack_middle([1])
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 1 value to unpack
|
|
Packit |
562c7a |
>>> unpack_middle('12')
|
|
Packit |
562c7a |
('1', [], '2')
|
|
Packit |
562c7a |
>>> unpack_middle([1,2])
|
|
Packit |
562c7a |
(1, [], 2)
|
|
Packit |
562c7a |
>>> unpack_middle('123')
|
|
Packit |
562c7a |
('1', ['2'], '3')
|
|
Packit |
562c7a |
>>> unpack_middle([1,2,3])
|
|
Packit |
562c7a |
(1, [2], 3)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, *b, c = l
|
|
Packit |
562c7a |
return a,b,c
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_middle_list(list l):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_middle_list([])
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_middle_list([1])
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 1 value to unpack
|
|
Packit |
562c7a |
>>> unpack_middle_list([1,2])
|
|
Packit |
562c7a |
(1, [], 2)
|
|
Packit |
562c7a |
>>> unpack_middle_list([1,2,3])
|
|
Packit |
562c7a |
(1, [2], 3)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, *b, c = l
|
|
Packit |
562c7a |
return a,b,c
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_middle_tuple(tuple t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_middle_tuple(())
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 0 values to unpack
|
|
Packit |
562c7a |
>>> unpack_middle_tuple((1,))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: need more than 1 value to unpack
|
|
Packit |
562c7a |
>>> unpack_middle_tuple((1,2))
|
|
Packit |
562c7a |
(1, [], 2)
|
|
Packit |
562c7a |
>>> unpack_middle_tuple((1,2,3))
|
|
Packit |
562c7a |
(1, [2], 3)
|
|
Packit |
562c7a |
>>> a,b,c = unpack_middle(list(range(100)))
|
|
Packit |
562c7a |
>>> a, len(b), c
|
|
Packit |
562c7a |
(0, 98, 99)
|
|
Packit |
562c7a |
>>> a,b,c = unpack_middle_list(list(range(100)))
|
|
Packit |
562c7a |
>>> a, len(b), c
|
|
Packit |
562c7a |
(0, 98, 99)
|
|
Packit |
562c7a |
>>> a,b,c = unpack_middle_tuple(tuple(range(100)))
|
|
Packit |
562c7a |
>>> a, len(b), c
|
|
Packit |
562c7a |
(0, 98, 99)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a, *b, c = t
|
|
Packit |
562c7a |
return a,b,c
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_many_middle(it):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_many_middle(list(range(14)))
|
|
Packit |
562c7a |
(0, 1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, 12, 13)
|
|
Packit |
562c7a |
>>> unpack_many_middle(tuple(range(14)))
|
|
Packit |
562c7a |
(0, 1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, 12, 13)
|
|
Packit |
562c7a |
>>> unpack_many_middle(iter(range(14)))
|
|
Packit |
562c7a |
(0, 1, 2, 3, 4, [5, 6, 7, 8, 9], 10, 11, 12, 13)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a,b,c,d,e,*f,g,h,i,j = it
|
|
Packit |
562c7a |
return a,b,c,d,e,f,g,h,i,j
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_many_left(it):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_many_left(list(range(14)))
|
|
Packit |
562c7a |
(0, 1, 2, 3, 4, 5, 6, 7, 8, [9, 10, 11, 12, 13])
|
|
Packit |
562c7a |
>>> unpack_many_left(tuple(range(14)))
|
|
Packit |
562c7a |
(0, 1, 2, 3, 4, 5, 6, 7, 8, [9, 10, 11, 12, 13])
|
|
Packit |
562c7a |
>>> unpack_many_left(iter(range(14)))
|
|
Packit |
562c7a |
(0, 1, 2, 3, 4, 5, 6, 7, 8, [9, 10, 11, 12, 13])
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
a,b,c,d,e,f,g,h,i,*j = it
|
|
Packit |
562c7a |
return a,b,c,d,e,f,g,h,i,j
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_many_right(it):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_many_right(list(range(14)))
|
|
Packit |
562c7a |
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
|
|
Packit |
562c7a |
>>> unpack_many_right(tuple(range(14)))
|
|
Packit |
562c7a |
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
|
|
Packit |
562c7a |
>>> unpack_many_right(iter(range(14)))
|
|
Packit |
562c7a |
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
*a,b,c,d,e,f,g,h,i,j = it
|
|
Packit |
562c7a |
return a,b,c,d,e,f,g,h,i,j
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def unpack_many_right_loop(it):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unpack_many_right_loop(list(range(14)))
|
|
Packit |
562c7a |
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
|
|
Packit |
562c7a |
>>> unpack_many_right_loop(tuple(range(14)))
|
|
Packit |
562c7a |
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
|
|
Packit |
562c7a |
>>> unpack_many_right_loop(iter(range(14)))
|
|
Packit |
562c7a |
([0, 1, 2, 3, 4], 5, 6, 7, 8, 9, 10, 11, 12, 13)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef int i
|
|
Packit |
562c7a |
for i in range(1):
|
|
Packit |
562c7a |
*a,b,c,d,e,f,g,h,i,j = it
|
|
Packit |
562c7a |
return a,b,c,d,e,f,g,h,i,j
|