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 ...
随机推荐
- poj3191(进制转换)
题目链接:http://poj.org/problem?id=3191 题意:将一个数转换为-2为基数的数 思路:套路,看代码就好了 代码: #include <iostream> usi ...
- luogu P5358 [SDOI2019]快速查询【模拟(?)】
把有单点修改和查询的点离散进一个数组,然后单点修改直接改,记录一个修改时间t,维护一个sm表示这些离散的点的和,val表示出了离散点其他点的值,因为都是一样的所以只记录这一个值即可,记录ljlc为加法 ...
- SequoiaDB培训视频
很久之前录制的SequoiaDB培训视频,现在都放上百度云盘了,感兴趣的同学可以看看. 第一讲:图形界面-安装前准备 链接: https://pan.baidu.com/s/1d2B3qUYqtKrE ...
- JS高级学习历程-4
4 执行环境可以访问什么变量 具体可以访问变量类型:局部变量.参数.函数.外部环境变量 优先级:局部变量 > 函数 > 参数 > 外部环境变量 <!DOCTYPE html&g ...
- 福昕阅读器把pdf某一页保存出来
第一步: 第二步: 第三步: 第四步:点击保存即可
- Codeforces 163E(ac自动机、树状数组)
要点 显然ac自动机的板子就可以暴力一下答案了 为了优化时间复杂度,考虑套路fail树的dfs序.发现本题需要当前这个尾点加上所有祖先点的个数,考虑使用树状数组差分一下,在父点+1,在子树后-1,每次 ...
- 算法导论课后习题解答 第一部分 练习1.1-1->1.1-5
很高兴能和大家一起共同学习算法导论这本书.笔者将在业余时间把算法导论后面的题解以博文的形式展现出来希望能得到大家的支持谢谢.如果有可能我会做一些教学视频免费的供大家观看. 练习题选自算法导论中文第三版 ...
- express转发请求
express var express = require('express'); var axios = require('axios'); var qs = require('qs'); var ...
- css3弹性伸缩和使用
columns 分栏 column的中文意思就是栏的意思,在html中,作用是分列,把一块内容相同比例均匀的分成一块一块的列,想报纸的内容似的,一篇文章在一张内容上分成好几栏那样显示,它的属性有 1 ...
- dao层写展示自己需要注意的问题
写dao层时一定要把 News news=new News(); 写在while循环内,是每循环一次,new出一个对象