python 中zip() 不同版本之间的差异, *表达式

原创 2018年04月17日 07:45:43

1. zip()

之前练习的时候写过这样的代码:

items = ["bananas", "mattress", "dog kennels", "machine", "cheeses"]
weights = [15, 34, 42, 120, 5]
totals = zip(items, weights)
for total in totals:
    print(total, end=' ')

zip是从每个参数列表中去一个元素,然后打包成新的元组,另外zip在python3中也是一种新的数据结构。

jupyter中py3的结果

  1. zip()拆分元组

既然有打包,就一定有解包,就像文件的压缩与解压缩一样,那么python里面的解压用的是*表达式。

ma = [('bananas', 15), ('mattress', 34), ('dog kennels', 42), ('machine', 120), ('cheeses', 5)]
item, weight = zip(*ma)

print(item)
print(weight)

我们再来看下这个例子的结果,同样使用的是py3:

解包

  1. *表达式

    表达式提供了放方便的方法,可以理解为shell里面的通配符(*),用来匹配多个参数或者对象(这里的对象不一定指面向对象里的对象,我本意是指所有文件名),在shell里面,我们想要同时对多个文件进行操作,这时候通配符就有很大的作用了。比如同时编译多个文件,我们可以

gcc *.c  或者 java *.java

那么在python中的*表达式也是相近的用法,举个例子:
“`
def drop_first_last(a):
first, *middle, last = a
return middle

print(drop_first_last([1, 3, 4, 5, 5, 5 , 5]))
print(drop_first_last([1,2]))
“`
*表达式

如果不用*表达式的话,默认形参数是3个,那么试着传入多个参数就会出错,*middle 相对于middle的好处就是可以用来接受多个参数,在print(drop_first_last([1, 3, 4, 5, 5, 5 , 5]))就是[3, 4, 5, 5, 5],当然传进去两个参数也可以的,不过这时候*middle就是空的了。但是,只是传入一个参数的话,python解释器会报一个’function’ object is not subscriptable的错误。

  1. zip()在python不同版本的区别
    python2
#python2

a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]

zipped = zip(a, c)
print(zip(a, c))
print(zip(a, b))
print(type(zipped))

l = ['a', 'b', 'c', 'd', 'e', 'f']
print l
print(zip(l[:-1], l[1:]))

python2

python3


#python3

a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]

zipped = zip(a, c)
print(zip(a, c))
print(zip(a, b))
print(type(zipped))

l = ['a', 'b', 'c', 'd', 'e', 'f']
print(l)
# print(l[:-1])
print(zip(l[:-1], l[1:]))

print(list(zip(a, b)))
print(list(zip(a, c)))
print(list(zip(l[:-1],l[1:])))

python3

由此可见,python2在zip的过程中自动把zip(a, b)转化成了list,python则需要显示转化。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38781498/article/details/79969124

不同版本iOS的特性和差异

1.iPhone OS 2.0         苹果在2008年3月6日iPhone SDK Roadmap会上正式介绍了iPhone OS 2.0。这个版本的获得的重要更新可以分成一下4大类: -...
  • fuzheng0301
  • fuzheng0301
  • 2015-07-15 16:35:46
  • 4139

Android各版本之间的差异

   Android 2.2   发行日期:2010.5.20 相对于上一个版本的改变: 1,  整体性能的大幅度提升 2,  3G网络共享功能 3,  Flash的支持 4...
  • smxueer
  • smxueer
  • 2016-08-20 18:23:52
  • 3916

【python学习笔记】python2.x与python3.x版本中zip函数的不同

Python版本3.3有zip这个用法吗? 按理来说,这个code是没错的,会return出[(0,3),(1,1),(2,4)]的结果,但是最后一行那是什么?谁能解释一下? ...
  • u012509485
  • u012509485
  • 2017-10-11 15:02:34
  • 173

git提取出两个版本之间的差异文件并打包命令

$ git diff 608e120 4abe32e --name-only | xargs zip update.zip
  • zhu3503302
  • zhu3503302
  • 2017-05-26 15:38:08
  • 364

Ubuntu 中Python不同版本切换的简便方法

alternatives这么好的机制用起来呀。 shell里执行: sudo update-alternatives --install /usr/bin/python python /usr/b...
  • woddle
  • woddle
  • 2017-05-01 19:09:16
  • 416

JDK各版本之间的特性区别

jdk1.5的新特性: 1. 泛型    ArrayList list=new ArrayList()------>ArrayListlist=new ArrayList(); 2 自动装箱/拆...
  • qq_36074044
  • qq_36074044
  • 2017-04-07 14:06:22
  • 896

对比软件(对比两个代码之间的差异,在用csv升级的时候,可以判断不同版本之间代码的差异。一个很好的对比工具)

  • 2009年05月15日 12:13
  • 3.09MB
  • 下载

JDK使用方法和不同版本之间的区别

  • 2011年06月28日 14:52
  • 29KB
  • 下载

python条件表达式的四种实现方法

a, b, c = 1, 2, 3 # 1.常规 if a>b:    c = aelse:    c = b # 2.表达式c = a if a>b else b # 先...
  • bcs_01
  • bcs_01
  • 2018-02-26 09:24:24
  • 155
收藏助手
不良信息举报
您举报文章:python 中zip() 不同版本之间的差异, *表达式
举报原因:
原因补充:

(最多只允许输入30个字)