Python——序列封包与序列解包
一、序列封包与序列解包
- 把多个值赋给一个变量时,Python会自动的把多个值封装成元组,称为序列封包。
- 把一个序列(列表、元组、字符串等)直接赋给多个变量,此时会把序列中的各个元素依次赋值给每个变量,但是元素的个数需要和变量个数相同,这称为序列解包。
什么叫做序列?序列可以理解为可以进行切片、相加相乘、索引、成员资格(用关键字in、not in关键字判断某个元素在不在这个序列),例如:列表、元组、字符串就是常见的序列。(Python中内置的三种数据结构:列表、元组、字典,只有字典不是序列)
序列封包例:
# 序列封包,把多个值赋给一个变量
a = 1,2,3
print (a)
# 打印 (1, 2, 3)
print (type(a))
# 打印 <class 'tuple'>
print (a[1:3])
# 打印 (2, 3)
序列解包:
# 创建一个元组
b = 'qwer'
c = tuple(b)
print (c,type(c)) # 打印 ('q', 'w', 'e', 'r') <class 'tuple'> k1,k2,k3 = c
# 元素个数与变量个数不相等时,解包会报错:ValueError: too many values to unpack (expected 3) # 序列解包
k1,k2,k3,k4 = c
print (k1,k2,k3,k4) # 打印 q w e r
# 实现变量的值交换
k1,k2,k3,k4 = k4,k3,k2,k1
print (k1,k2,k3,k4) # 打印 r e w q # 不解包进行变量的值交换将会报错
tyui = 1,2,3,4
t,y,u,i = i,u,y,t
# 报错:NameError: name 'y' is not defined
当我们在序列解包时,只想解出部分元素时,可以在变量的左边加“ * ”,该变量就会变成列表,保存多个元素,例:
a = tuple(range(10))
print(a) # 打印 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # 只解出0到2,3到9保存为一个列表
b0,b1,b2,*b3 = a
print (b3) # 打印 [3, 4, 5, 6, 7, 8, 9] # 只解出8到9,0到7保存为一个列表
*c1,c2,c3 = a
print (c1) # 打印 [0, 1, 2, 3, 4, 5, 6, 7] # 只解出0和9,1到7保存为一个列表
c1,*c2,c3 = a
print(c2) # 打印 [1, 2, 3, 4, 5, 6, 7, 8]
Python——序列封包与序列解包的更多相关文章
- Python 序列与映射的解包操作
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
- Python 序列与映射的解包操作-乾颐堂
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
- Python_序列与映射的解包操作
解包就是把序列或映射中每个元素单独提取出来,序列解包的一种简单用法就是把首个或前几个元素与后面几个元素分别提取出来,例如: first, seconde, *rest = sequence 如果seq ...
- Python 中星号作用:解包&打散
python中’*’和’**’的使用分两个方面,一个是计算,另一个是参数传递过程中元素的打包和解包. 计算方面 ‘*’和’**’在python中最常见的作用分别是‘相乘’和‘乘幂’,如下: > ...
- Python小技巧:使用*解包和itertools.product()求笛卡尔积
[问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = ['a', 'b'] list2 = ['c', 'd'] ...
- Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)
leetcode上做提示时候看到有高人用这个方法解题 [问题] 目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表: list1 = [' ...
- python中收集函数的解包问题
收集参数的解包问题 - 把参数放入list或者字典中,直接把list/dict中的值放入收集参数中- 语法:参照案例 # 收集参数的问题 def stu(*args): print("=&q ...
- python收集参数与解包
收集任意数量的实参 def make_pizza(*toppings): """打印顾客点的所有配料""" print(toppings) ...
- python 零散记录(五) import的几种方式 序列解包 条件和循环 强调getattr内建函数
用import关键字导入模块的几种方式: #python是自解释的,不必多说,代码本身就是人可读的 import xxx from xxx import xxx from xxx import xx1 ...
随机推荐
- php 数值转多少年,多少天,多少时,多少分,多少秒
function Sec2Time($time){ if(is_numeric($time)){ $value = array( "years" => 0, "da ...
- java五行代码导出Excel
目录 先看代码 再看效果 EasyExcel 附: Java按模板导出Excel---基于Aspose实现 Java无模板导出Excel,Apache-POI插件实现 已经写过两种Excel导出插件了 ...
- LDAP理论知识
整理改编自: https://www.cnblogs.com/yjd_hycf_space/p/7994597.html http://blog.51cto.com/407711169/1439623 ...
- input 内容发生改变时触发事件
oninput,onpropertychange,onchange的用法 onchange触发事件必须满足两个条件: a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效) b)当前对象失 ...
- 教你如何在 IDEA 远程 Debug ElasticSearch
前提 之前在源码阅读环境搭建文章中写过我遇到的一个问题迟迟没有解决,也一直困扰着我.问题如下,在启动的时候解决掉其他异常和报错后,最后剩下这个错误一直解决不了: [2018-08-01T09:44:2 ...
- 在IDEA中编辑struts国际化properties文件
在IDEA中编辑struts国际化properties文件 如果手工创建的web工程,struts的i18n属性文件,可以使用native2ascii工具转换(记得命令行的第二个文件名是要保存的文件名 ...
- es6+字符串string的新增方法函数
String.includes("xxx") 返回true/false [es5的字符串查找方法:String.indexOf() ] String.startsWit ...
- vue-cli 该如何正确打包iconfont?
其实这种问题应该问google的: got wrong bootstrap font path after building · Issue #166 · vuejs-templates/webpac ...
- js基础的自定义属性练习
js基础的自定义属性练习: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type ...
- 在使用seek()函数时,有时候会报错为 “io.UnsupportedOperation: can't do nonzero cur-relative seeks”,代码如下:
__author__ = 'ZHHT' #!/usr/bin/env python # -*- coding:utf-8 -*- import os f = open("test1" ...