zip函数

zip()一般传入可迭代对象(不止一个),将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的zip对象(python2返回元组),需要手动使用tuple、list等序列转换成可使用的对象。

打包

# 传入一个可迭代对象
data = [i for i in range(3)]
print(list(zip(data)))
# 传入多个可迭代对象,元素个数相对应
data = [i for i in range(3)]
data2 = [j for j in range(3)]
print(list(zip(data, data2)))
# 传入多个可迭代对象,元素个数不对应,会选取元素最少的可迭代对象作为对应
data = [i for i in range(3)]
data2 = [j for j in range(4)]
print(list(zip(data, data2)))



以最后一个为例,流程为

[0, 1, 2]
[0, 1, 2]
一一对应,转变为
[(0, 0), (1, 1), (2, 2)]

解包

只需要在打包的对象前面添加*即可

data = [i for i in range(3)]
data2 = [j for j in range(4)]
ret = list(zip(data, data2))
print(ret)
print(*ret)
# 恢复成原来的两个可迭代对象,不过是以列表格式
print(list(zip(*ret)))

*在不同场景下的区别

1.在非函数或方法中的参数中,类似于在zip中的,就是解包操作,将元组解开为多个元组,也可以再进行zip还原成原来的可迭代对象

print(	list(zip(*ret)))

2.在函数或方法的参数中的*

作为可变参数,传入时以元组形式呈现

def test(m, *args):
print(m, args) test('sa', 'asd', 'qwe')



需要注意的是,目前发现当必选参数添加形参名称时,后面的可变参数无法正常设置,如下所示

test(m='sa', 'asd', 'qwe')

** 的使用场景

一般出现在函数或方法的可变关键字参数,以字典形式呈现

def test(m, **kwargs):
print(m, kwargs) test(1, a=1,b=2)

python zip、*、**理解的更多相关文章

  1. python zip文件密码爆破

    #!/usr/bin/env # coding=UTF-8 import zipfile import threading import os import sys class CrackZip: d ...

  2. python zip函数(11)

    一.zip函数描述和使用 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,返回的结果可以直接强转为list列表,这样做的好处是节约了不少的 ...

  3. python zip()函数

    描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符 ...

  4. Python zip Python zip函数

    zip([iterable, ...])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的li ...

  5. 【转】Python zip() 函数

    转自:http://www.runoob.com/python/python-func-zip.html 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回 ...

  6. python property理解

    一般情况下我这样使用property: @property def foo(self): return self._foo # 下面的两个decrator由@property创建 @foo.sette ...

  7. Python ZIP 文件创建与读取

    Automate the Boring Stuff 学习笔记 02 Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作.要进行相关操作,首先需要实例化一个 Zip ...

  8. python zip()

    >>> help(zip) Help on built-in function zip in module __builtin__: zip(...) zip(seq1 [, seq ...

  9. python 深入理解 赋值、引用、拷贝、作用域

    在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域, 这点和大多数 OO 语言类似吧,比如 C++.java 等 ~ 1.先来看个 ...

随机推荐

  1. html单页面通过cdn引入element-ui组件样式不显示问题

    html单页面通过cdn引入element-ui组件样式不显示问题 必须先引入vue,再通过cdn引入element,否则element-ui组件与样式无效. <!DOCTYPE html> ...

  2. maccms10二开批量入库和资源打包

    批量入库 因为maccms自带的采集采集起来很慢,而且很多资源站的采集接口不能对内容排序,导致最旧的数据最后入库.用java写个采集程序,采集完入库的时候发现不能一次性入库多个数据,导致入库也很慢,所 ...

  3. apache tomcat 目录session应用信息漏洞

    Tomcat 是一款开源的 Web 应用服务器软件.Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不多的场合下被普遍使用,是开发和调试 JSP 程序的首选. 漏洞描述 apache T ...

  4. C# 四舍五入中一处易错点

    ,你没看错,四舍五入的结果 和我们期待的不太一样 Why?? 进入源码看下,注释中解释的很清楚.. 默认情况下,Math.Round()方法返回的是最接近的整数,这个没问题,问题是当要转换的数据在 两 ...

  5. 使用argparse进行调参

    argparse是深度学习项目调参时常用的python标准库,使用argparse后,我们在命令行输入的参数就可以以这种形式python filename.py --lr 1e-4 --batch_s ...

  6. springboot如何使用自定义配置文件

      从前边<springboot竟然有5种默认的加载路径,你未必都知道>我们知道,springboot会默认加载application.properties/application.yml ...

  7. redis击穿,穿透,雪崩,分布式锁,api(jedis,luttuce)

    击穿:(redis做缓存用,肯定发生了高并发,到达数据库查询) 设置key 的过期时间,过期后没有这个key,找不到了,就穿过了(其中一个key过期导致并发访问数据库) LRU (LRU,即:最近最少 ...

  8. 如何优雅的使用MyBatis?

    ​本文目录 什么是 MyBatis ? 映射器(mappers) typeAliases 类型别名减少类完全限制名的冗余 处理枚举类型 多行插入 重用 SQL 代码段,消除重复 字符串替换#{}和${ ...

  9. Bika LIMS 开源LIMS集——实验室检验流程概述及主页、面板

    主页 主页左侧为功能入口菜单.右侧含待办提醒,中间为工作区. 工作区功能将主要工作页面置于首页,便于用户操作. Dashboard 面板 系统面板 包括待排定的实验任务.实验中的任务数.复核/审核中的 ...

  10. C语言学习之我见-memchr()内存查找字符函数

    memchr()内存查找字符函数:主要用于从内存中查找自己需要的字符位置. (1)函数原型: void *memchr(const void *_Buf ,int _Val,size_t _MaxCo ...