Python基础 之列表、字典、元组、集合
基础数据类型汇总
一、列表(list)
例如:删除索引为奇数的元素
lis=[11,22,33,44,55] #第一种:
for i in range(len(lis)):
if i%2==1:
del lis[i]
print(lis) #第二种
li=[]
for i in lis:
if lis.index(i)%2==0:
li.append(i)
lis=li
print(lis) #第三种:
for i in range(len(lis)-1,-1,-1):
if i%2==1:
del lis[i]
print(lis) #第四种:当然 最简单了
lis=lis[0::2]
print(lis)
注意:在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错。
二、字典(dict)
dic=dict.fromkeys([1,2,3],"二哥")
print(dic) #{1: '二哥', 2: '二哥', 3: '二哥'}
1.同一个列表
dic=dict.fromkeys([1,2,3],[])
print(dic) #{1: [], 2: [], 3: []} dic[1].append("二哥")
print(dic) #{1: ['二哥'], 2: ['二哥'], 3: ['二哥']}
2.删除键为“k”开头的键值对
dic={"k1":"v1","k2":"v2","a1":"v3"}
#第一种:
dic1={}
for i in dic:
if "k" not in i:
dic1.setdefault(i,dic[i])
dic=dic1
print(dic)
#第二种:
l=[]
for i in dic:
if "k" in i:
l.append(i)
for i in l:
del dic[i]
print(dic)
注意:字典、列表删除时不能循环键值对
三、元组(tuple)
tu1 = (1)
tu2 = (1,)
print(tu1,type(tu1)) #1 <class 'int'>
print(tu2,type(tu2)) #(1,) <class 'tuple'> tu1 = ([1])
tu2 = ([1],)
print(tu1,type(tu1)) #[1] <class 'list'>
print(tu2,type(tu2)) #([1],) <class 'tuple'>
注意:如果元组里面只有一个元素 ,且不加逗号,则此元素是啥类型就是啥类型;
如果有其他元素或只有一个逗号,就是元组。
四、集合
集合操作
特点:1)集合为可变的数据类型,但集合元素必须是不可变的数据类型。
2)无序
3不重复
1、创建集合
# set1=set({1,2,3,4,5})
# set2={4,5,6,7,8}
2、增
1)add
set1={"alex","wusir","ritain","egon","barry",}
set1.add("女神")
print((set1)) #{'wusir', 'barry', 'ritain', 'egon', 'alex', '女神'}
2)update:迭代添加
set1={"alex","wusir","ritain","egon","barry",}
set1.update("abc")
print(set1) #{'egon', 'barry', 'c', 'b', 'alex', 'a', 'wusir', 'ritain'}
3、删除
1)、pop(随机删除,有返回值)
set1={"alex","wusir","ritain","egon","barry",}
set1.pop() #随机删除(有返回值)
print(set1) #{'egon', 'barry', 'alex', 'ritain'}
2)remove(按元素)
set1={"alex","wusir","ritain","egon","barry",}
set1.remove("alex") #按元素
print(set1) {'ritain', 'egon', 'wusir', 'barry'}
3)clear(清空集合)
set1={"alex","wusir","ritain","egon","barry",}
set1.clear() #清空集合
print(set1) #set()
4)del(删除字典)
set1={"alex","wusir","ritain","egon","barry",}
del set1 #删除集合
print(set1) #报错
不能改:无序、元素为不可变数据类型
4、查
for循环
set1={"alex","wusir","ritain","egon","barry",}
for i in set1:
print(i)
5、交集(& 或者 intersection)
set1={1,2,3,4,5}
set2={4,5,6,7,8}
print(set1 & set2)
print(set1.intersection(set2)) #{4, 5}
6、并集(| 或者 union)
set1={1,2,3,4,5}
set2={4,5,6,7,8}
print(set1|set2)
print(set2.union(set1)) #{1, 2, 3, 4, 5, 6, 7, 8}
7、反交集(^ 或者 symmetric_difference)
set1={1,2,3,4,5}
set2={4,5,6,7,8}
print(set1^set2)
print(set1.symmetric_difference(set2)) #{1, 2, 3, 6, 7, 8}
8、差集(- 或者 difference)
set1={1,2,3,4,5}
set2={4,5,6,7,8}
print(set1-set2)
print(set1.difference(set2)) #{1, 2, 3}
9、子集与超集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2)
print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。
print(set2 > set1)
print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
10、5,frozenset不可变集合,让集合变成不可变类型。
s = frozenset('barry')
print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>
深浅copy
1、赋值运算
l1 = [1,2,3,['barry','alex']]
l2 = l1 l1[0] = 111
print(l1) # [111, 2, 3, ['barry', 'alex']]
print(l2) # [111, 2, 3, ['barry', 'alex']] l1[3][0] = 'wusir'
print(l1) # [111, 2, 3, ['wusir', 'alex']]
print(l2) # [111, 2, 3, ['wusir', 'alex']]
注意:对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。
2、浅拷贝copy
l2 = l1.copy()
print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
l1[1] = 222
print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896 l1[3][0] = 'wusir'
print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
注意:对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
3,深拷贝deepcopy
import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1) print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 l1[1] = 222
print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816
print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 l1[3][0] = 'wusir'
print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240
print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304
注意:对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
枚举
放可迭代对象,自动匹配索引,默认从0开始。
li=["alex","taibai","wusir","egon"]
for i in enumerate(li):
print(i) # (0, 'alex')
# (1, 'taibai')
# (2, 'wusir')
# (3, 'egon')
li=["alex","taibai","wusir","egon"]
for index,i in enumerate(li): #默认从0开始
print(index,i) # 0 alex
# 1 taibai
# 2 wusir
# 3 egon
li=["alex","taibai","wusir","egon"]
for index,i in enumerate(li,1): #可设置索引从1开始
print(index,i) # 1 alex
# 2 taibai
# 3 wusir
# 4 egon
Python基础 之列表、字典、元组、集合的更多相关文章
- python之字符串,列表,字典,元组,集合内置方法总结
目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 元组的内置方法 集合类型内置方法 布尔类型 数据类型总结 数字类型的内置方法 整型/浮点型 加 + 减 - ...
- python基础之列表list元组tuple
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7041763.html python基础之列表list元组tuple 列表li ...
- python基础之 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- Python基础之列表、元组、字典、集合的使用
一.列表 1.列表定义 names=["Jhon","Lucy","Michel","Tom","Wiliam ...
- python基础之 列表,元组,字典
other help(str.strip) #查看是否有返回值以及返回值类型[] :称为索引操作符 1.列表 列表相比字符串来说能存储大量数据的python的基本数据类型,并且也拥有字符串的一些方法( ...
- Python基础2 列表 字典 集合
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- Python基础学习 -- 列表与元组
本节学习目的: 掌握数据结构中的列表和元组 应用场景: 编程 = 算法 + 数据结构 数据结构: 通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些元素可以是数字或者字符,或者其他数据 ...
- python基础4 列表和元组
一. 列表列表:python基础数据类型之一:其他语言中也有列表的概念,js 数组,可索引,可切片,可加步长li = ['hello', 100, True, [1, 2, 3], {'name':' ...
- python基础之列表、元组
一.列表 列表(list)是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 作用:多个装备,多个爱好,多门课程,多个女朋友等 定义:[ ]内可以有多个任意类型的值,逗号 ...
- Python基础:列表,元组和字典的基本操作
列表(集合list)的基本操作: # 列表的常见操作 nameList = ["张学友", "刘德华", "郭富城", "黎明&q ...
随机推荐
- javascript的八张思维导图
出处:http://www.cnblogs.com/junhey/p/4292683.html
- yield关键字用法与解析(C# 参考)
yield 关键字向编译器指示它所在的方法是迭代器块. 编译器生成一个类来实现迭代器块中表示的行为. 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返 ...
- 关于 webpack-dev-server 热更新出现重复的问题
关于 webpack-dev-server 热更新出现重复的问题 webpack-dev-server 在前端开发时很方便,可以热更新,只需要配置 webpack.config.js 即可. 但是昨天 ...
- Oracle记录(二) SQLPlus命令
对于Oracle数据库操作主要使用的是命令行方式,而所有的命令都使用sqlplus完成,对于sqlplus有两种形式.就我个人而言,还是比较喜欢UNIX与Linux下的Oracle.呵呵 一种是dos ...
- jvm是怎样调用方法的
jvm内部有五种调用方法的指令 invokeinterface 用以调用接口方法,在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用.(Invoke interface method) ...
- nginx安装及编译参数详解
1.centos下Yum安装 Nginx yum list|grep nginx 发现没有可用的结果通过创建下面的文件在系统中添加nginx仓库的yum配置vi /etc/yum.repos.d/ng ...
- 杂项-公司:星巴克百科-un
ylbtech-杂项-公司:星巴克百科 星巴克(Starbucks)是美国一家连锁咖啡公司的名称,1971年成立,是全球最大的咖啡连锁店,其总部坐落美国华盛顿州西雅图市.星巴克旗下零售产品包括30多款 ...
- PL/SQL 训练11--包
--所谓包,就是把一组PL/SQL的代码元素组织在一个命名空间下.--一种可以把程序或者其他的PL/SQL元素比如游标.类型.变量的组织结构在一起的结构(包括逻辑结构和物理结构)--包提供了非常重要的 ...
- python开发IO模型:阻塞&非阻塞&异步IO&多路复用&selectors
一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非 ...
- C#根据字体名通过注册表获取该字体文件路径(win10)两种方法推荐第二种
方法一: 直接先上源码: private System.Collections.Generic.SortedDictionary<string, string> ReadFontInfor ...