本问题已经有最佳答案,请猛点这里访问。

我用的是清单p = [[1,2,3],[4,5,6]]。

如果我这样做:

>>>d=zip(p)

>>>list(d)

[([1, 2, 3],), ([4, 5, 6],)]

不过,我真正想要的是通过以下方式获得:

>>>d=zip(*p)

>>>list(d)

[(1, 4), (2, 5), (3, 6)]

我发现在列表名称之前添加一个"*"会给出我所需的输出,但我无法区分它们的操作。你能解释一下区别吗?

zip希望将一系列参数压缩在一起,但您拥有的是一个参数(一个列表,其元素也是列表)。函数调用中的*将列表(或其他iterable)"解包",使其每个元素都成为单独的参数。所以如果没有*,你就是在做zip( [[1,2,3],[4,5,6]] )。使用*时,您将使用zip([1,2,3], [4,5,6])。

*运算符在函数调用语句中解包参数。

考虑这个

def add(x, y):

return x + y

如果您有一个清单t = [1,2],您可以说add(t[0], t[1]),这是不必要的冗长,或者您可以使用*操作符将t"解包"成单独的参数,如add(*t)。

这就是您的示例中发生的事情。zip(p)就像运行zip([[1,2,3],[4,5,6]])一样。zip在这里只有一个参数,所以它只是以元组的形式返回它。

zip(*p)就像运行zip([1,2,3], [4,5,6])一样。这类似于运行zip(p[0], p[1]),您可以得到预期的输出。

*字符称为解包运算符。当它出现在可iterable对象后面时,它所做的就是将可iterable中的项逐个传递给函数的调用方。在这种情况下,由于zip函数接受一个iterables列表以返回其对齐的列,因此zip(*p)将p中的所有项作为zip函数的参数传递:

因此,在这种情况下,zip(*p)等于:

zip([1,2,3],[4,5,6])

另外,请注意,由于python-3.5,除了在函数调用程序中,在其他一些情况下,您可以对运算符进行解包。其中一个称为就地解包,它允许您在另一个iterable中使用解包。

In [4]: a = [1, 2, 3]

In [5]: b = [8, 9, *a, 0, 0]

In [6]: b

Out[6]: [8, 9, 1, 2, 3, 0, 0]

虽然这不是你问的问题的答案,但应该有帮助。因为zip用于组合两个列表,所以您应该像这样做list(zip(p[0], p[1]))来完成您所期望的。

"*"运算符解包列表并将其应用于函数。zip函数接受n个列表,并从两个列表中的每个元素创建n个元组对:

zip([iterable, ...])

This function returns a list of tuples, where the i-th tuple contains

the i-th element from each of the argument sequences or iterables. The

returned list is truncated in length to the length of the shortest

argument sequence. When there are multiple arguments which are all of

the same length, zip() is similar to map() with an initial argument of

None. With a single sequence argument, it returns a list of 1-tuples.

With no arguments, it returns an empty list.

基本上,通过使用*和[[1,2,3],[4,5,6]],您将把[1,2,3]和[4,5,6]作为参数传递给zip。

简言之,使用x = [1,2,3],当调用f(x)时,x接收到1个参数[1, 2, 3]。当使用星型操作符f(*x)时,f接收到三个参数,相当于调用f(1,2,3)。

这就是为什么在python的文档中,您经常会看到some_function(*args, **kwargs)。在这里,双星操作员也做同样的事情,但是对于字典:对于d={"some_arg":2,"some_other_arg":3},调用f(**d)与f(some_arg=2, some_other_arg=3)是相同的。

现在,当您使用zip时,实际上您希望使用[4,5,6]压缩[1,2,3],因此您希望将2个参数传递给zip,因此需要一个星形运算符。没有它,你只传递一个参数。

像前面提到的那样,使用*或**的函数定义是*运算符的不同用法。在这种情况下,它用于创建变量函数。它们与*有关,而op所说的更像是apply操作符的语法糖。把他们两个混为一谈是个坏主意。

我认为它们是同一概念的两个方面(尽管行为不同)。在一种情况下(函数定义),您指定函数将接受在一个名称(args)下分组的多个参数,而在另一种情况下,您将一个名称分派给多个参数。当然,它们是不同的,但是它们是紧密相连的语法概念,理解其中一个可以让你理解另一个。

就像我说的,他们是相关的,但鉴于提问者在这个领域缺乏专业知识,这将使他们困惑而不是指导。

够公平的。希望他能挖得更远。

python zip dict_关于python:zip(list)和zip(* list)之间的区别相关推荐

  1. Python中abs()和fabs()方法之间的区别

    In python, abs() method and fabs() method both are used to find the absolute value of a number. They ...

  2. python虚拟环境 pyenv_Python 虚拟环境 pyenv、venv(pyvenv)、virtualenv之间的区别

    请参考连接 https://blog.zengrong.net/post/2167.html https://blog.csdn.net/lanonjj/article/details/5105021 ...

  3. Python中列表的del,remove和pop函数之间的区别

    1)Python del函数 (1) Python del function) del is nothing but "delete". del is a keyword whic ...

  4. 一个Python爬虫案例让你看清Python2和3之间的区别

    随着Python越来越受欢迎了,也越来越多的人加入到这个大家庭当中,有很多的初学者都会有一个疑问,我学习Python是学习2版本的呢还是3版本的呢?Python2和Python3又有什么区别呢? 我想 ...

  5. python中的编码和解码_Python中“is”和“==”之间的区别,以及编码和解码,与

    Python中'is'和'=='的区别,以及编码与解码 Python中'=='和'is'的区别 (1)Python中'==' Python中'==比较变量的值,如果值相同返回True,如果不同返回Fl ...

  6. python中定义变量和数组_Python中的线程和全局变量 - 数组和标准变量之间的区别?...

    我目前尝试使用线程编写一个更大的python程序,并遇到了数组不必被声明为全局的问题.Python中的线程和全局变量 - 数组和标准变量之间的区别? import numpy as np import ...

  7. Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件、zip压缩文件

    Python将Pandas中Dataframe数据保存为gzip/zip文件:gzip压缩文件.zip压缩文件 目录 Python将Pandas中Dataframe数据保存为gzip/zip文件:gz ...

  8. 成功解决Python中出现的TypeError: object of type 'zip' has no len()

    成功解决Python中出现的TypeError: object of type 'zip' has no len() 不罗嗦,直接解决问题! 目录 解决问题 解决思路 解决方法 解决问题 TypeEr ...

  9. python如何使用字典_python字典怎么使用zip

    这篇文章主要介绍了Python zip()函数用法,结合实例形式较为详细的分析了Python zip()函数的功能.使用方法及相关操作注意事项. 这里介绍python中zip()函数的使用:(推荐学习 ...

最新文章

  1. eureka的自我保护
  2. mzy,struts学习(一)
  3. python进阶(小白也能看懂)——*args与**kwargs的使用
  4. retrofit2.6.0_RxAndroid和Retrofit 2.0
  5. html轮播图向左改为向下,jQuery之轮播图向左滚动动画【原创】
  6. vue可缓存的单页面多标签页
  7. vue3中获取dom元素和操作
  8. 资源分配博弈之纳什均衡和斯塔克尔伯格模型
  9. Android实现TCP客户端
  10. BPSK调制gardner算法的MATLAB实现
  11. mapgis坡度分析_gis气候分析图_用MAPGIS做城市气候的分析需要什么类型的数据可以从哪下载_滁州气象...
  12. 最炫python表白代码_制作炫酷的表白小程序
  13. Weights Biases (一)
  14. 阿里云物联网平台使用图文教程
  15. Linux Centos8 安装Minio开机启动并Nginx代理访问
  16. Java课程设计-实验室预约管理系统
  17. 线程池(线程池介绍与使用)
  18. 关于SNR和EbN0转换关系
  19. 其他总结(七)--解决谷歌浏览器不显示翻译此页按钮(网页自动翻译)
  20. spring boot+iview 前后端分离架构之文件上传的实现(三十一)

热门文章

  1. UVA10943 How do you add【递推打表】
  2. HDU3784 继续xxx定律【角谷猜想】
  3. UVA11173 Grey Codes【位操作】
  4. Bailian2713 肿瘤面积【基础】
  5. CCF201709-2 公共钥匙盒(100分)【模拟+优先队列】
  6. HDU1235 统计同成绩学生人数【水题+序列处理】
  7. 辨异 —— Java 中 String 的相等性比较
  8. linux/unix 基本概念的认识(sha-bang 、PPA)
  9. 危险的化学 —— 氢氟酸
  10. GDB 使用教程(二)