zip()我们可以简单的称它为打包函数,当需要的时候再进行解压,可有效节省内存,提高效率。
Python内置函数 zip()
zip()利用可迭代对象作为参数,返回一个包含元组的迭代器,元组由每个可迭代对象组成,如:第i个元组由每个可迭代对象的第i个元素组成。
1. 语法 zip(*iterables)
- 参数可选,可以没有,可以是一个,也可以是多个
- 当没有参数时,返回一个空迭代器
- 当只有一个参数时,返回只有一个元素元组的迭代器
- 当有多个参数时,如果每个参数的长度不一样,则迭代器结束于最短的那个参数
In [1]:
zip()
Out[1]:
<zip at 0x33bcda0>
In [2]:
zip(range(9))
Out[2]:
<zip at 0x33e24b8>
In [3]:
list (zip(range(9)))
Out[3]:
[(0,), (1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,)]
In [4]:
letter1 = ['A', 'B', 'C', 'D']
In [5]:
letter2 = ['甲', '乙', '丙', '丁']
In [6]:
letter3 = (1, 2, 3, 4, 5, 6)
In [7]:
list(zip(letter1, letter2, letter3))
Out[7]:
[('A', '甲', 1), ('B', '乙', 2), ('C', '丙', 3), ('D', '丁', 4)]
In [8]:
list(zip(letter1, letter2))
Out[8]:
[('A', '甲'), ('B', '乙'), ('C', '丙'), ('D', '丁')]
In [9]:
tuple(zip(letter2, letter1))
Out[9]:
(('甲', 'A'), ('乙', 'B'), ('丙', 'C'), ('丁', 'D'))
In [10]:
list(zip(letter1, letter3))
Out[10]:
[('A', 1), ('B', 2), ('C', 3), ('D', 4)]
In [11]:
dict(zip(letter3, letter2))
Out[11]:
{1: '甲', 2: '乙', 3: '丙', 4: '丁'}
In [12]:
list(zip(range(1,7),'Python'))
Out[12]:
[(1, 'P'), (2, 'y'), (3, 't'), (4, 'h'), (5, 'o'), (6, 'n')]
2. 解压 zip(*zip(iterables))
- zip(*)经常用来解压一个列表
In [13]:
a, b = zip(*zip(letter1, letter2))
In [14]:
list(zip(*a, *b))
Out[14]:
[('A', 'B', 'C', 'D', '甲', '乙', '丙', '丁')]
In [15]:
f = a, b
In [16]:
list(f)
Out[16]:
[('A', 'B', 'C', 'D'), ('甲', '乙', '丙', '丁')]
In [17]:
list(zip(*f))
Out[17]:
[('A', '甲'), ('B', '乙'), ('C', '丙'), ('D', '丁')]
In [18]:
c, d = zip(*zip(letter3, letter2))
In [19]:
list(c)
Out[19]:
[1, 2, 3, 4]
In [20]:
tuple(d)
Out[20]:
('甲', '乙', '丙', '丁')
In [21]:
e = c, d
In [22]:
dict(zip(*e))
Out[22]:
{1: '甲', 2: '乙', 3: '丙', 4: '丁'}
In [23]:
list(zip(*e))
Out[23]:
[(1, '甲'), (2, '乙'), (3, '丙'), (4, '丁')]
In [24]:
letter32 = zip(letter3, letter2)
In [25]:
list(zip(*letter32))
Out[25]:
[(1, 2, 3, 4), ('甲', '乙', '丙', '丁')]