Python Day07 元组 ,字典

目录:

Day06 元组tuple 字典dict

元组 tuple

元组是不可改变的序列,同list一样,元组可以存放任意类型的元素

表示方法:

用小括号 () 括起来,单个元素括起来后加逗号(,)区分单个对象还是元组

创建空元组的字面值

t = ()

### 创建非空元组的字面值
t = 200,
t = (20,)
t = (1,2,3)
t = 100, 200, 300

type(x) 函数用来返回 x 的类型

元组的错误示例:

t = (20)
x, y, z = 100, 200, 300  # 序列赋值
x, y, z = (100, 200, 300)  # 序列赋值
x, y, z = [100, 200, 300]  # 序列赋值
x, y, z = "ABC"  # 序列赋值

元组的构造(创建)函数tuple

tuple() 生成一个空元组,等于同()
tuple(iterable) 用可迭代对象生成一个元组

元组的运算:

元组的所有运算同列表的运算方式一致
算术运算:
+ += * *=
比较运算
< <= > >= == !=
in / not in 运算
索引 和 切片
元组的索引和切片等同于列表的索引和切片
元组的切片返回一个元组
元组不能索引赋值和切片赋值

元组的方法:

T.count(value) 返回元素个数(同list.count)
T.index(value, [start, [stop]]) 返回某个元素在元组的索引位置(同list.index)

序列相关的函数:

len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)
str(obj) 将对象序列化为字符串
list(iterable)
tuple(iterable)
reversed(seq) 返回反向顺序的迭代器对象
sorted(iterable, reverse=False) 返回已排序的列表

示例:
L = [2,3,5,7]
for x in reversed(L):
print(x) # 打印 7, 5, 3, 2

思考:
元组里能否存入列表?即:
t = (1,2,[3.1, 3.2])
能否把 3.1 改为3.14 ?
为什么?

练习:
任意输入一个字符串,将此字符串中的空格全部去掉,生成返转后的字符串:
如:
输入: abc def g<回车>
打印输出: gfedcba
(提示:可以用反向切片或reversed进行反转)

字典 dict

什么是字典:

字典是一种可变的容器,可以存储任意类型的数据
字典中的每个数据都是用’键’进行索引的,而不像序列可以用下标(index)来进行索引
字典中的数据没有先后顺序关系, 字典的存储是无序的
字典中的数据以键(key)-值(value) 对的形式进行映射存储
字典的键不能重复,具只能用”不可变类型”作为字典的键

字典的字面值的表示方式:

字典的表示方式以 {} 括起来,以冒号(:) 分隔键-值对, 各键-值对之间用逗号(,)分割开

创建空字典:

d = {} # d绑定空字典

创建非空字典:

d = {‘name’: ‘home’, ‘age’: 16}
d = {‘year’: 2018, ‘month’: 4, ‘day’:1}

字典的构造函数dict

dict() 生成一个空字典,等同于 {}
dict(iterable) 用可迭代对象初始化一个字典
dict(**kwargs) 用命名关键字传参形式生成一个字典

示例:
d = dict()
d = dict([(‘name’, ‘home’), (‘age’, 15)])
d = dict(name=’home’, age=15)

字典的键为不可变类型:

bool, int, float, complex, str, tuple, frozenset(固定集合), bytes(字节串)(后面会讲)
包括: None

可变的类型(不能充当字典的键)
list, dict, set(集合), bytearray(字节数组)(后面才讲)

字典的基本操作:

  1. 键索引:
        语法:
          字典[键]
        示例:  
           `>>> d = {'name': 'home', 'age': 15}`
           `>>> d['name']`
         `  'home'`
          ` >>> d['age']`
           `15`
2. 添加/修改字典元素
字典[键] = 值对象
示例:
  d = {}
  d['birthday'] = (2002, 1, 1)  # 添加键值对
  d['age'] = 16  # 添加键值对 
  d['age'] = 17  # 修改'age'键所对应的值
3. 删除字典元素 del 语句
    语法:
      del 字典[键]
    示例:
      d = {'name': 'home', 'age': 16}
      del d['age'] # 删除'age'这个键

练习:

  1. 算出 100 ~ 999 以内的水仙花数(Narcissistic Number)
     水仙花数是指百位的3次方 加上 十位的3次方 加上个位的3次方等于原数的数字
     例如: 
        153 等于 1**3 + 5**3 + 3**3

  2. 任意输入一些大于零数,存于列表中L,当输入-1时结束输入
    L = [1, 3, 5, 3, 7, 9, 3, 7, 6, 5]
    1) 打印出这些数
    2) 打印出这些数的和
    3) 去掉列表L中重复第二次或之后出现的数,再次存到另一个列表L2中
       L2 = [1, 3, 5, 7, 9, 6]
       打印这些数
    4) 打印L2列表中的数据的和
    5) 将 L列表中,出现两次的数存到另一个列表L3中
         L3 = [5, 7]

字典的成员资格判断 in / not in 运算符

  用 in 运算符可以判断一个键是否存在于字典中,如果存在则返回True,否则返回False
  not in 返回值与 in 相反

示例:
  d = {1: "一", 2: "二"}
  1 in d      # True
  2 in d      # True
  2 not in d  # False
  8 not in d  # True
  8 in d      # False
  '一' in d   # False

列表的 in 运算符和字典的 in 运算符比较:
  1. 列表的in运算符计算时间会因列表中元素个数的增加而增加
    L = [3,7,0,1,4,5,6....... 10976]  # 大约有十万个
    if 888 in L:
        print("888在列表里")  # 慢
  2. 字典的in运算符计算时间不会因键值对的个数增加而增加,操作速度快于列表
    d = {3: "三", 7: "xx", 0: None, ... 10976:None}
    if 888 in d:
         print("888在字典的键里")  # 快

字典的迭代访问:

容器是可迭代对象,字典只能对键进行迭代访问
d = {‘name’: ‘小张’, ‘birthday’: (2008,8,8)}
for k in d:
print(k)

可以用于字典的内建(built-in)函数:

len(x) 返回字典的键值对的个数
max(x) 返回字典的键的最大值
min(x) 返回字典的键的最小值
sum(x) 返回字典的所有键的和
any(x) 对所有键进行真值测试,有一个为True结果为True
all(x) 对所有键进行真值测试,所有为True才为True

字典的方法:
见:
>>> help(dict)

file: python_base_docs_html/dict_xxxx.html

练习:

输入一个字符串代表星期几(0~6), “0”/’日’代表周日,’1’/’一’ 代表周一.
‘2’/’二’ 代表周二………. ‘6’/’六’ 代表 周六
任意输入字符串,打印这个字符串是否代表星期几,如果不是以上字符打印”字典内没有相应的数据”
(要求将以上数据存于字典中, 键为字符串:’0123456日一二三…六’中的一个,值为星期几或周几)
d = {
‘0’: “星期天”,
‘日’: “星期天”,
‘1’: “星期一”,
…..
}

字典推导式:

作用:
用可迭代对象生成字典
语法:
{键表达式 : 值表达式 for 变量 in 可迭代对象 [if 真值表达式]}
注: []的内容代表可省略

示例:
# 生成一个字典,键为10以内的数字,值为键的平方
d = {x : x ** 2 for x in range(10)}

练习:

  1. 有字符串列表如下:
    L = [“home”, ‘xiaozhang’, ‘hello’]
    用推导式生成如下字典:
    d = {“home”:6, ‘xiaozhang’:9, ‘hello’:5}
    注: 字典的值为键的长度

  2. 有两个列表:
    no = [1001, 1002, 1003, 1004]
    names = [‘Tom’, ‘Jerry’, ‘Spike’, ‘Tyke’]
    用no中的编码为作为键,以names中的字符串作为值,生成相应的字典
    提示 : range(4)来生成索引

字典推导式的嵌套:

语法同列表推导式嵌套

字典 VS 列表

  1. 都是可变对象
  2. 索引方式不同, 列表用整数索引,字典用键索引
  3. 字典的查找速度可能会快于列表(重要)
  4. 列表的存储是有序的,字典的存储是无序的
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值