Python容器--list, tuple, dict, set
## Python 中有四种用于存放数据的序列--list, tuple, dict, set
## list 列表
- 可以存放任意类型数据的有序序列
- 列表可以由零个或多个元素组成,元素之间用逗号分开,整个列表被方括号所包裹:
- 创建
- 使用[]或者list()创建列表
- new_list = ["Stanley", "Loves", "Lily"]
- 访问及修改
- 使用列表名[索引]来访问和修改列表元素,索引初始值为0,最大值不超过列表长度 - 1
- print(new_list[1]) # -> "Loves"
- new_list[1] = "Adores"
- print(new_list) # -> ['Stanley', 'Adores', 'Lily']
- 若索引可以为负数,则是从列表末尾以-1为初始值开始计数
- 使用[start, end, step]分片生成新的列表(新列表和旧列表位于不同内存地址)
- [:]提取从开头到结尾的整个字符串
- [start:]从start提取到结尾
- [:end]从开头提取到 end - 1
- [start:end]从start提取到end - 1
- [start:end:step]从start提取到end - 1,每隔step个字符提取
- start,end,step可以为负数,start和end为负数表示从右往左数,从-1开始计数,step为负数则表示倒序
- 与列表有关的常用函数
- len(a_list):返回列表长度
- a_list.append(新元素):将新元素添加至列表末尾
- a_list.extend(another_list):将another_list添加至a_list末尾,可以使用 += 达到相同效果, a_list += another_list
- a_list.insert(index, 新元素):将新元素插入列表指定位置,若index的值大于列表长度,则将新元素插入列表末尾
- del a_list[index]:删除指定位置的元素,index的值必须小于列表长度
- del不是函数,而是Python语句,是赋值语句(=)的逆过程,它将变量和值之间的绑定解除
- a_list.remove(元素):删除指定值的元素
a_list = ['a', 'b', 'c']
a_list.remove('b')
print(a_list) # -> ['a', 'c']
- a_list.pop(index):弹出指定位置的元素,index默认为-1
- a_list.index(元素):如果列表中存在指定元素,则返回该元素的索引
- 使用 in 判断某列表中是否存在某值,若存在,返回True,若不存在,返回False
- a_list.count(元素):返回元素中某元素出现的次数
- a_list.sort():列表排序,默认为升序,通过添加参数 reverse=True 可以改变为降序排列
- a_list.copy():返回一个不同内存地址但列表值相同的新列表,浅拷贝,只能拷贝一层内容,对于嵌套列表的内存地址不做改变
- 列表修改问题
- 示例:
a = [1, 2, 3] # -> 创建新列表
b = a # -> 让b和a指向同一内存地址
b[1] = "a" # -> 通过b修改列表中第二个元素
print(a) # 输出[1, 'a', 3],由于指向同一内存,因此对b的修改同样会影响到a
- 可以通过copy()函数、list()转换函数和[:]分片生成新的不同内存地址的列表,如此对新列表的修改就不会影响到旧列表的内容
## tuple 元组
- 使用()或者tuple()创建元组
- 元组可以看作不可更改的列表
- 相对而言,元组比列表占用的空间少
- 元组特性和列表基本相同,但不能使用更改元素内容的相关函数,例如append()、insert()等
- 创建注意事项
- 若元组内只有一个元素,在元素后需要有一个逗号表示这是一个元组
- 也可以不用括号创建,但需要在元素后需要有一个逗号表示这是一个元组
a = 1,
print(type(a)) # -> <class 'tuple'>
## dict 字典
- 一种组合数据,没有顺序,数据以键值对的形式出现
- 创建: d = {} 或者 d = dict()
d = {
key1: value1,
key2: value2,
...
key_n: value_n
}
- 特性
- 字典是序列类型,但是是无序序列,所以没有索引和切片
- 字典中的所有数据都是键值对
- key必须是可哈希的数值,比如int str, float, tuple等,但是list, set, dict等不行
- value可以是任何值
- 删除: del dic[key] # -> 删除整个键值对
- 相关函数
- d.keys():返回字典的键
- d.values():返回字典的值
- d.items():以列表的格式返回字典数据
d = {
"Name": "Stanley",
"Age": 22
}
print(d.items()) # -> dict_items([('Name', 'Stanley'), ('Age', 22)])
- d.clear():清空
- d.get(key[, 默认值]):根据指定键,返回相应值,好处是可以设置默认值,若参数key在字典中不存在,则不会报错,而是返回传入的默认值
- dict.fromkeys():使用指定的序列作为键,使用一个值作为字典的所有键的值
a_list = [1, 2, 3, 4]
d = dict.fromkeys(a_list, "LOVE")
print(d) # -> {1: 'LOVE', 2: 'LOVE', 3: 'LOVE', 4: 'LOVE'}
# set 集合
- 集合是高中数学中的一个概念
- 一堆确定的无序的唯一的数据
- 同样可以使用大括号定义,但大括号内必须有值
- 特征:
- 集合内数据无序,即无法使用索引和切片
- 集合内部数据具有唯一性,可以用来排除重复数据
- 集合内的数据,str, int, float, tuple等可哈希的数据
- 集合本身不可哈希
- 函数:
- s.add():向集合中添加元素
- s.clear():清空集合(原集合操作)
- s.copy():浅拷贝
- s.remove(值):移除指定值,若集合中没有该值会报错
- s.discard(值):移除指定值,若集合中没有该值不会报错
- s.pop():随机弹出集合中的一个值,没有参数
- s1.intersection(s2):交集
- s1.difference(s2):差集
- s1.union(s2):并集
- s1.issubset(s2):检查集合s1是否是集合s2的子集
- s1.issuperset(s2):检查集合s1是否是集合s2的超集
- 集合的数学操作
s1 = {1, 2, 3}
s2 = {2, 3, 4, 5}
s3 = s2 - s1
print(s3) # -> {4, 5}
- frozen set 冰冻集合
- 冰冻集合就是不可以进行任何修改的集合
- 创建:s = frozenset()
- 这是一种特殊的集合,具备除了修改外集合的所有特性
## list, dict, set 都可以使用推导式生成
- 列表推导式格式:[ expression for item in iterable if condition],if过滤条件可以省略,该格式同样适用于set,但中括号需要改为{}
a_list = [n for n in range(1, 10) if n % 2 == 0]
print(a_list) $ -> [2, 4, 6, 8]
- 字典推导式格式:{ key_expression : value_expression for expression in iterable }
a_list = [n for n in range(1, 5)]
b_list = ["a", "b", "c", "d"]
c_dict = {k: b_list[k - 1] for k in a_list}
print(c_dict) # -> {1: 'a', 2: 'b', 3: 'c', 4: 'd'}
- tiple是没有推导式的,虽然也可以使用[ expression for item in iterable if condition],但实际上这已经成为了一个生成器
a_tuple = (n for n in range(1, 10))
print(a_tuple) # -> <generator object <genexpr> at 0x7f5ee58dd360>
本文参考书籍:[美]Bill Lubanovic 《Python语言及其应用》
Python容器--list, tuple, dict, set的更多相关文章
- Python中list,tuple,dict,set的区别和用法
Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...
- Python中list,tuple,dict,set的区别和用法(转)
原文地址:http://www.cnblogs.com/soaringEveryday/p/5044007.html Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个 ...
- python list 和 tuple, dict 用于迭代代价
#!/usr/bin/env python #-*- coding:utf-8 -*- import time start = time.time() for i in range(1000000): ...
- python中list/tuple/dict/set的区别
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是列表list和元组t ...
- python 之 list,tuple,dict,set
基本类型, 其中set好像提到的很少 list : [] 根据字面, 是一个列表, 所以有序, 可以通过序号方位 tuple: () 是不变的list, 通过序号访问 dict: {}, 字 ...
- python中list,tuple,dict,set等深浅拷贝的问题记录
对于字典.元祖.列表 而言,进行赋值.浅拷贝和深拷贝时,其内存地址的变化是不同的. 1.赋值 赋值,只是创建一个变量,该变量指向原来内存地址,如: 1 2 3 n1 = {"k1" ...
- list,tuple,dict,set常用方法
Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...
- Python中内置数据类型list,tuple,dict,set的区别和用法
Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...
- python学习中,list/tuple/dict格式化遇到的问题
昨天上了python培训的第一课,学习了基础知识.包括类型和赋值,函数type(),dir(),id(),help()的使用,list/tuple/dict的定义以及内置函数的操作,函数的定义,控制语 ...
随机推荐
- [转]在离线环境中发布.NET Core至Windows Server 2008
本文转自:http://www.cnblogs.com/durow/p/5765145.html 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面 ...
- 超链接导致window.location.href失效的解决办法
通常我们采用 window.location.href 执行页面间的跳转,比如下面的语句 window.location.href = 'https://www.baidu.com/'; 一般执行上面 ...
- 一步步理解typedef
1.如何用C语言实现一个函数,传递两个整形数,返回两个数的和? #include<stdio.h> int add(int a,int b) { return a+b; } void ma ...
- 【起航计划 008】2015 起航计划 Android APIDemo的魔鬼步伐 07 App->Activity->Persistent State 保存状态 SharedPreferences onPause onResume
Android 提供了多种存储数据的方法,其中最简单的是使用Shared Preferences. Shared Preferences 可以存储 Key/value 对,Shared Prefere ...
- vos话务抽查小方法
问题: 假如现在公司落地前缀主要有三个分别如下: 9150:主要用来走正规量 880:用来走正规量 660:全业务(合法) 已知: 非法业务量主要有:博彩,发票,白银,黄金,期货 合法非正规量有:保健 ...
- php 调用微信虚拟支付
摘要:小游戏对接微信虚拟支付,需要自己的后台调用微信的虚拟支付接口,微信的文档实在烂,总结走过的坑. 1.报错{errcode:90007,errmsg:invalid openid} 无效的open ...
- HTC vive VR设备软硬件安装+运行unity开发的VR程序
总结在HTC vive VR开发过程中的HTC vive的安装调试 1.首先确保电脑的配置满足要求: 进入官网,测试电脑是否满足要求 链接:https://www.vive.com/us/produc ...
- 修改hosts工具推荐SwitchHosts
推荐一个修改hosts的工具.适合平时工作中经常修改hosts的开发测试. 下载地址:https://oldj.github.io/SwitchHosts/ 可以按各种环境或者项目添加,用的时候打开或 ...
- 每天备份NAS上的www目录到一块单独的硬盘上
#!/bin/bash DATE=`date -d "now" +%Y%m%d` dataBackupDir=/media/2a76a963-92b1-4f74-a2c8-b7dc ...
- 【转】android四大组件--ContentProvider详解
一.相关ContentProvider概念解析: 1.ContentProvider简介在Android官方指出的Android的数据存储方式总共有五种,分别是:Shared Preferences. ...