当前位置: 代码迷 >> 综合 >> python zip()及*args
  详细解决方案

python zip()及*args

热度:25   发布时间:2023-11-24 12:32:29.0

文章目录

  • 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'}])]
  相关解决方案