Day2-列表、字符串、字典、集合
一、列表
定义列表:通过下标访问列表中的内容,从0开始
>>> name = ["zhang","wang","li","zhao"]
>>> print(name[0],name[2],name[-1],name[-2])
zhang li zhao li
切片
>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]
['Tenglan', 'Eric', 'Rain']
>>> names[1:-1]
['Tenglan', 'Eric', 'Rain', 'Tom']
>>> names[0:3]
['Alex', 'Tenglan', 'Eric']
>>> names[:3]
['Alex', 'Tenglan', 'Eric']
>>> names[3:-1]
['Rain', 'Tom']
>>> names[3:]
['Rain', 'Tom', 'Amy']
>>> names[0::2]
['Alex', 'Eric', 'Tom']
>>> names[::2]
['Alex', 'Eric', 'Tom']
追加
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
>>> names.append("New_user")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', 'New_user']
插入
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', 'New_user']
>>> names.insert(2,'Insert_newuser')
>>> names
['Alex', 'Tenglan', 'Insert_newuser', 'Eric', 'Rain', 'Tom', 'Amy', 'New_user']
修改
>>> names
['Alex', 'Tenglan', 'Insert_newuser', 'Eric', 'Rain', 'Tom', 'Amy', 'New_user']
>>> names[1] = "Modify"
>>> names
['Alex', 'Modify', 'Insert_newuser', 'Eric', 'Rain', 'Tom', 'Amy', 'New_user']
删除
>>> names
['Alex', 'Modify', 'Insert_newuser', 'Eric', 'Rain', 'Tom', 'Amy', 'New_user'] >>> del names[1] #下标删除
>>> names
['Alex', 'Insert_newuser', 'Eric', 'Rain', 'Tom', 'Amy', 'New_user'] >>> names.remove('Eric') #删除指定元素
>>> names
['Alex', 'Insert_newuser', 'Rain', 'Tom', 'Amy', 'New_user'] >>> names.pop() #删除列表最后一个值
'New_user'
>>> names
['Alex', 'Insert_newuser', 'Rain', 'Tom', 'Amy']
扩展
>>> names
['Alex', 'Insert_newuser', 'Rain', 'Tom', 'Amy']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Alex', 'Insert_newuser', 'Rain', 'Tom', 'Amy', 1, 2, 3]
统计
>>> names = [2,3,1,4,2,2]
>>> names.count(2)
3
排序&翻转&清空
>>> names = ['Alex', 'Insert_newuser', 'Rain', 'Tom', 'Amy', 1, 2, 3]
>>> names
['Alex', 'Insert_newuser', 'Rain', 'Tom', 'Amy', 1, 2, 3]
>>> names.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'
>>> names[-3] = ''
>>> names[-2] = ''
>>> names[-2] = ''
>>> names[-1] = ''
>>> names
['Alex', 'Amy', 'Insert_newuser', 'Rain', 'Tom', '', '', '']
>>> names.sort()
>>> names
['', '', '', 'Alex', 'Amy', 'Insert_newuser', 'Rain', 'Tom']
>>> names.reverse()
>>> names
['Tom', 'Rain', 'Insert_newuser', 'Amy', 'Alex', '', '', '']
>>> names.clear()
>>> names
[]
获取下标
>>> names = ['Alex', 'Insert_newuser', 'Rain', 'Tom', 'Amy', 1, 2, 3]
>>> names.index('Rain')
2
>>>
复制:分为浅复制和深复制
浅copy:
s = [[1,2],3,4]
s1 = s.copy()
s1[1] = 'oliver'
s1[0][1] = 'hello'
print('列表s:',s)
print('列表s1:',s1) 执行结果:
列表s: [[1, 'hello'], 3, 4]
列表s1: [[1, 'hello'], 'oliver', 4]
如下图所示,使用列表内置的copy方法,是将新列表中的元素指向了与原列表相同的内存空间。但是,如果列表中嵌套了列表,拷贝后的列表中嵌套的列表元素指针,指向原列表中嵌套列表的整体地址,而不是指向嵌套列表中元素的内存地址。
深copy:
import copy
s = [[1,2],3,4]
s2 = copy.deepcopy(s)
s2[0][1] = 'abc'
print('列表s:',s)
print('列表s2',s2)
执行结果:
列表s: [[1, 2], 3, 4]
列表s2 [[1, 'abc'], 3, 4]
总结:
1、浅拷贝只能拷贝最外层,修改内层则原列表和新列表都会变化。
2、深拷贝是指将原列表完全克隆一份新的。
二、字符串
特性:不可修改
>>> name = "my name is alex"
>>> print(name.capitalize()) #首字母大写
My name is alex
>>> print(name.expandtabs()) #首字母小写
my name is alex
>>> print(name.count("a")) #计算'a'的个数
2
>>> print(name.center(50,'-')) #添加-,一共50个字符
-----------------my name is alex------------------
>>> print(name.ljust(50,'*'))
my name is alex***********************************
>>> print(name.rjust(50,'*'))
***********************************my name is alex
>>> print(name.encode())
b'my name is alex'
>>> print(name.endswith('ex')) #判断是否以ex结尾
True
三、字典:key-value的数据类型
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
定义字典:
>>> info = {
... 'stu1101':'Tenglan Wu',
... 'stu1102':'Long',
... 'stu1103':'xiaoze'
... }
>>> print(info)
{'stu1101': 'Tenglan Wu', 'stu1102': 'Long', 'stu1103': 'xiaoze'}
增加:
>>> info['stu1104'] = "Cang"
>>> info
{'stu1101': 'Tenglan Wu', 'stu1102': 'Long', 'stu1103': 'xiaoze', 'stu1104': 'Ca
ng'}
删除:
#三种删除的方式
>>> info.pop('stu1101') #标准删除
'Tenglan Wu'
>>> info
{'stu1102': 'Long', 'stu1103': 'xiaoze', 'stu1104': 'Cang'}
>>> del info['stu1102'] #删除具体元素
>>> info
{'stu1103': 'xiaoze', 'stu1104': 'Cang'}
>>> info.popitem() #随机删除
('stu1104', 'Cang')
>>> info
{'stu1103': 'xiaoze'}
修改:
>>> info['stu1103'] = 'oulu'
>>> info
{'stu1103': 'oulu'}
>>>
查询:
>>> info = {'stu1101': 'Tenglan Wu', 'stu1102': 'Long', 'stu1103': 'xiaoze'}
>>> 'stu1101' in info #标准用法
True
>>> info.get('stu1102') #获取
'Long'
>>> info['stu1102'] #同上
'Long'
>>> info['stu1106'] #如果元素不存在,则报错;而get却不会
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'stu1106'
多级字典嵌套及操作:
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
} av_catalog["大陆"][""][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"][""])
执行结果:
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
1.打印value:
print(av_catalog.values())
dict_values([{'www.youporn.com': ['很多免费的,世界最大的', '质量一般'], 'www.pornhub.com': ['很多免费的,也很大', '质量比yourporn高点'], 'letmedothistoyou.com': ['多是自拍,高质量图片很多', '资源不多,更新慢'], 'x-art.com': ['质量很高,真的很高', '全部收费,屌比请绕过']}, {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}, {'1024': ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']}])
2.#setdefault:如果值存在,就不做任何东西;如果不存在,则创建
av_catalog.setdefault('taiwan',{'www.baidu.com':[1,2]})
print(av_catalog)
{'欧美': {'www.youporn.com': ['很多免费的,世界最大的', '质量一般'], 'www.pornhub.com': ['很多免费的,也很大', '质量比yourporn高点'], 'letmedothistoyou.com': ['多是自拍,高质量图片很多', '资源不多,更新慢'], 'x-art.com': ['质量很高,真的很高', '全部收费,屌比请绕过']}, '日韩': {'tokyo-hot': ['质量怎样不清楚,个人已经不喜欢日韩范了', '听说是收费的']}, '大陆': {'1024': ['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']}, 'taiwan': {'www.baidu.com': [1, 2]}}
3.字典拼接
info={
'stu1101':"TengLanWu",
'stu1102':"LongZeLuola",
'stu1103':"XiaoZeMaliya",
}
b={
'stu1101':"alex",
1:3,
2:5,
}
info.update(b)
print(info)
执行结果:
{'stu1101': 'alex', 'stu1102': 'LongZeLuola', 'stu1103': 'XiaoZeMaliya', 1: 3, 2: 5}
4.字典转换成列表
print(info.items())
dict_items([('stu1101', 'alex'), ('stu1102', 'LongZeLuola'), ('stu1103', 'XiaoZeMaliya'), (1, 3), (2, 5)])
5.初始化字典
>>> c = dict.fromkeys([6,7,8])
>>> print(c)
{6: None, 7: None, 8: None}
>>> c = dict.fromkeys('test',[6,7,8])
>>> print(c)
{'t': [6, 7, 8], 'e': [6, 7, 8], 's': [6, 7, 8]}
>>> c = dict.fromkeys([6,7,8],[1,{'name':'alex'},444])
>>> print(c)
{6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'alex'}, 444], 8: [1, {'name': '
alex'}, 444]} #修改了全部值
>>> c[7][1]['name'] = 'JackChen'
>>> print(c)
{6: [1, {'name': 'JackChen'}, 444], 7: [1, {'name': 'JackChen'}, 444], 8: [1, {'
name': 'JackChen'}, 444]}
6.字典循环
>>> print(info)
{'stu1101': 'Tenglan Wu', 'stu1102': 'Long', 'stu1103': 'xiaoze'}
>>>
>>>
>>>
>>> for key in info: #建议用
... print(key,info[key])
...
stu1101 Tenglan Wu
stu1102 Long
stu1103 xiaoze >>> for k,v in info.items(): #多了字典转换列表的过程,数据量大时莫用
... print(k,v)
...
stu1101 Tenglan Wu
stu1102 Long
stu1103 xiaoze
四、集合
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
创建集合
>>> s = set([3,5,7,9,3,5])
>>> s
{9, 3, 5, 7}
>>> t = set("hello")
>>> t
{'l', 'h', 'o', 'e'}
关系型测试:交差并对称集合
a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)
创建集合:
list_1=[1,4,5,6,7,4,9]
list_1=set(list_1)
list_2=set([2,6,0,66,22,8,4])
print(list_1,list_2)
{1, 4, 5, 6, 7, 9} {0, 2, 66, 4, 6, 8, 22} #求交集
print(list_1.intersection(list_2))
{4, 6}
#求并集
print(list_1.union(list_2))
{0, 1, 2, 66, 4, 5, 6, 7, 8, 9, 22}
#求差集(我有你没有的)
print(list_1.difference(list_2)) list_1有的list_2没有的
{1, 5, 9, 7}
#求子集
list_3=set([1,5,9])
print(list_3.issubset(list_1))
True
#求父集
print(list_1.issuperset(list_3))
True
#对称差集:把各自没有的取出来放在一块
print(list_1.symmetric_difference(list_2))
{0, 1, 2, 66, 5, 7, 8, 9, 22} list_4=set([3,2,8])
print(list_3.isdisjoint(list_4))
True
#当两个集合没有交集的时候,返回True list2.copy()集合跟列表是一样的,浅copy list_1.add(999) 添加
list_1.update([888,777,555]) 多项添加
print(list_1)
{1, 4, 5, 6, 7, 999, 9, 777, 555, 888} 删除
list_1.remove(999)
list_1.discard(999) 区别是:删除一个不存在的元素时,remove会报错,discard不会报错
list_1.pop() 随机删除 len(s)
set 的长度 x in s
测试 x 是否是 s 的成员 x not in s
测试 x 是否不是 s 的成员 s.issubset(t)
s <= t
测试是否 s 中的每一个元素都在 t 中 s.issuperset(t)
s >= t
测试是否 t 中的每一个元素都在 s 中 s.union(t)
s | t
返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t)
s & t
返回一个新的 set 包含 s 和 t 中的公共元素 s.difference(t)
s - t
返回一个新的 set 包含 s 中有但是 t 中没有的元素 s.symmetric_difference(t)
s ^ t
返回一个新的 set 包含 s 和 t 中不重复的元素 s.copy()
返回 set “s”的一个浅复制
Day2-列表、字符串、字典、集合的更多相关文章
- Python之旅Day2 元组 字符串 字典 集合
元组(tuple) 元组其实跟列表差不多,也是存一组数,与列表相比,元组一旦创建,便不能再修改,所以又叫只读列表. 语法: names = ("Wuchunwei","Y ...
- Day2 列表,元组,字典,集合
一,列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. list=['alex', 'jack', 'chen', 'shaoye'] #创建一个列表. 特性: 1.可存 ...
- **python中列表 元组 字典 集合
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. 1.列表 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔. 列表的特 ...
- python中列表 元组 字典 集合的区别
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...
- python_列表——元组——字典——集合
列表——元组——字典——集合: 列表: # 一:基本使用# 1.用途:存放多个值 # 定义方式:[]内以逗号为分隔多个元素,列表内元素无类型限制# l=['a','b','c'] #l=list([' ...
- python3笔记十八:python列表元组字典集合文件操作
一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle #数据持久性模块 #封装的方法def OptionData(data,path): # ...
- python的学习笔记01_4基础数据类型列表 元组 字典 集合 其他其他(for,enumerate,range)
列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素 特性: 1.可存放多个值 2.可修改指定索引位置对应的值,可变 3.按照从左到右的顺序定义列表元素,下标从0开始顺序访问 ...
- Python 全栈开发二 python基础 字符串 字典 集合
一.字符串 1,在python中,字符串是最为常见的数据类型,一般情况下用引号来创建字符串. >>ch = "wallace" >>ch1 = 'walla ...
- Day 07 数据类型的内置方法[列表,元组,字典,集合]
数据类型的内置方法 一:列表类型[list] 1.用途:多个爱好,多个名字,多个装备等等 2.定义:[]内以逗号分隔多个元素,可以是任意类型的值 3.存在一个值/多个值:多个值 4.有序or无序:有序 ...
- python 中列表 元组 字典 集合的区别
先看图片解释 (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计过去一周我们买过的东西,把这些东西列出来,就是清单.由于我们买一种东西可能不止一次,所以清单中是允许有重复 ...
随机推荐
- 整合初步______SH
什么是框架 在的J2EE开发中,经常会提到"框架"这个词汇,例如Spring,Struts,Webx等等都称之为J2EE开发框架.那么,什么是框架呢? 框架的英文为Framewor ...
- 结合ThreadLocal来看spring事务源码,感受下清泉般的洗涤!
在我的博客spring事务源码解析中,提到了一个很关键的点:将connection绑定到当前线程来保证这个线程中的数据库操作用的是同一个connection.但是没有细致的讲到如何绑定,以及为什么这么 ...
- JVM初探之类文件结构
java 的 .class 文件字节码如图:Class 文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构.下面我们介绍下class文件的结构. 魔数 class文件的头4个字节是魔数 ...
- 重新认识JavaScript里的创建对象(一)
一.序 面向对象有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.ECMA-262把对象定义为"无序属性的集合,其属性可以包含基本值.对象或者函数&quo ...
- Redis数据类型之字符串String
String类型是Redis中最基本也最简单的一种数据类型 首先演示一些常用的命令 一.SET key value 和GET key SET key value 和 GET key 设置键值和获取值 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...
- 初次接触 Android Studio FAQ
1. 2. 3. 4. 6. 7. Tools -> Adnroid -> enable ADB integration 8.官方模拟器太慢,还是自己下个第三方模拟器吧. http:/ ...
- 数据库问题(程序连接mysql错误)
今天服务器遇到了一个很熟悉的问题 输入 #mysql -u root -p ERROR 2002 (HY000):Can't connect to local MySQL server 随即上网找寻答 ...
- SELECT中的多表连接
MySQL多表连接查询 连接(join):将一张表中的行按照某个条件(连接条件)和另一张表中的行连接起来形成一个新行的过程. 根据连接查询返回的结果,分3类: 内连接(inner join) 外连接( ...
- 这可能是php世界中最好的日志库——monolog
由于一些历史原因,php中并没有内建的日志接口,故长期以来也没一个功能完备并且应用广泛的日志库.在我的工作生涯中,如果系统需要记录一些应用日志的话,基本上就是封装一个日志类,然后把一些要记录的字段写入 ...