Python解包和压包

将元祖、列表、字典、字符串、生成器等整体中的每个元素当成个体剥离出来,这个过程就是解包,反过来即为压包。

一.解包

1.简单解包

[python]

#元组

a,b,c=("a","b","c")

#列表

a,b,c=["a","b","c"]

#字典

a,b,c={"a":1,"b":2,"c":3}

#字符串

a,b,c="abc"

#生成器

a,b,c = [x+1forxinrange(3)]

#迭代器

a,b,c = enumerate(["a","b"."c"])

可迭代对象都可以这么做,如果待赋值变量与可迭代对象数量不一致则会报错,但可用*号表示多个元素

2.*号在解包中的使用

比如我们要计算平均分,去除最高分和最低分,除了用切,还可以用解包的方式获得中间的数值

[python]

a,*b,c = [90,80,70,60,50]

输出:a:90,b:[80,70,60],c:50

3.复杂点的解压

[python]

mylist = [("apple","red",1),("banana","white",2),("orange","orange",3)]

forfruit,*argsinmylist:

print(fruit,args)

输出:

apple ['red',1]

banana ['white',2]

orange ['orange',3]

二.压包

压包是解包的逆过程,用zip函数实现,

zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象(Python3)。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

[python]

a = [1,2,3]

b = [4,5,6]

foriinzip(a,b)

print(i)

输出:

(1,4)

(2,5)

(3.6)

三.解包和压包结合

下面例子实现:两个列表对应数值相加

[python]

a = [1,2,3]

b = [4,5,6]

fori,jinzip(a,b)

print(i+j)

输出:

5

7

9

细细拆解上面过程,可以看出步骤是这样的

先是zip函数将a b压包成为一个可迭代对象

对可迭代对象的每一个元素((1, 4))进行解包(i, j = (1, 4))

此时就可以分别调用i j变量进行计算

四._号在解压包中的使用

当一些元素不用时,用_表示是更好的写法,可以让读代码的人知道这个元素是不要的

[python]y">copy

person = ("adou",23,80,("12","13","2018"))

name,*_,(*_,year) = person

print(name,year)

输出:

adou2018

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180624G1GNM000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券