文章目录
- python zip()
python zip()
ref:
python 在列表,元组,字典变量前加*号。。【很重要】
函数中*args和**kwargs的人应该知道,这两个形参都接收若干个参数,通常我们将其称为参数组;
- *args:接收若干个位置参数,转换成元组tuple形式
- **kwargs:接收若干个关键字参数,转换成字典dict形式
- 位置参数*args,一定要在关键字参数**kwargs前
- 带*变量的作用,就仿佛是把列表解开一层似
最后需要注意的是:
- 可迭代对象才可以使用*号拆分;
- 带*号变量严格来说并不是一个变量,而更应该称为参数,它是不能赋值给其他变量的,但可以作为参数传递;
概述:
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
key:
- 打包多个可迭代对象,即
zip(*iterable)
- 取出列表中的对应位置的元素,组成新元组
- 这样就由行转列了(只能是一维的情况)
- 二维转置:zip(*list_2dim_var)。使用了位置参数*args的语法。
- 使用list()输出结果
- *号操作符,解压元组为列表(这里是*zipped)
demo:
results1 = list(zip(csv_rows_list))
results = list(zip(*csv_rows_list))
results2 = list(zip(*results1))
print(csv_rows_list)
print(results1)
print(*csv_rows_list)
print(results)
print(results2)
结果分析:
# csv_rows_list是一个list对象,而且是一维list,每个元素是array,也是一个对象
[array([2, 2, 5, 1, 2], dtype=int32), array([0.8 , 0.8 , 0.65, 0.9 , 0.8 ]), array([0. , 0. , 0.15, 0.1 , 0. ]), array([2, 2, 2, 1, 5], dtype=int32), array([0.75, 0.75, 0.75, 1. , 0.25]), array([0. , 0. , 0.25, 0. , 0.25]), [{
'C': 4.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 8.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 1.0, 'kernel': 'linear'}, {
'C': 1.0, 'kernel': 'poly'}, {
'C': 1.0, 'kernel': 'sigmoid'}]]
# list(zip(csv_rows_list)) 由于是array对象,即csv_rows_list是一维list,所以压缩成一个元组,然后用list输出,就是一个包含一个元组的list
[(array([2, 2, 5, 1, 2], dtype=int32),), (array([0.8 , 0.8 , 0.65, 0.9 , 0.8 ]),), (array([0. , 0. , 0.15, 0.1 , 0. ]),), (array([2, 2, 2, 1, 5], dtype=int32),), (array([0.75, 0.75, 0.75, 1. , 0.25]),), (array([0. , 0. , 0.25, 0. , 0.25]),), ([{
'C': 4.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 8.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 1.0, 'kernel': 'linear'}, {
'C': 1.0, 'kernel': 'poly'}, {
'C': 1.0, 'kernel': 'sigmoid'}],)]
# *csv_rows_list 拆分list,可以看*变量的解释,在ref
[2 2 5 1 2] [0.8 0.8 0.65 0.9 0.8 ] [0. 0. 0.15 0.1 0. ] [2 2 2 1 5] [0.75 0.75 0.75 1. 0.25] [0. 0. 0.25 0. 0.25] [{
'C': 4.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 8.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 1.0, 'kernel': 'linear'}, {
'C': 1.0, 'kernel': 'poly'}, {
'C': 1.0, 'kernel': 'sigmoid'}]
# 这里是对上面的list进行了拆分,这样zip压缩就是对多个list压缩。也符合zip(*iterable)的语法
[(2, 0.8, 0.0, 2, 0.75, 0.0, {
'C': 4.0, 'gamma': 2.0, 'kernel': 'rbf'}), (2, 0.8, 0.0, 2, 0.75, 0.0, {
'C': 8.0, 'gamma': 2.0, 'kernel': 'rbf'}), (5, 0.65, 0.15000000000000002, 2, 0.75, 0.25, {
'C': 1.0, 'kernel': 'linear'}), (1, 0.9, 0.09999999999999998, 1, 1.0, 0.0, {
'C': 1.0, 'kernel': 'poly'}), (2, 0.8, 0.0, 5, 0.25, 0.25, {
'C': 1.0, 'kernel': 'sigmoid'})]
# 解压,又得到csv_rows_list
[(array([2, 2, 5, 1, 2], dtype=int32), array([0.8 , 0.8 , 0.65, 0.9 , 0.8 ]), array([0. , 0. , 0.15, 0.1 , 0. ]), array([2, 2, 2, 1, 5], dtype=int32), array([0.75, 0.75, 0.75, 1. , 0.25]), array([0. , 0. , 0.25, 0. , 0.25]), [{
'C': 4.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 8.0, 'gamma': 2.0, 'kernel': 'rbf'}, {
'C': 1.0, 'kernel': 'linear'}, {
'C': 1.0, 'kernel': 'poly'}, {
'C': 1.0, 'kernel': 'sigmoid'}])]