07、python的基础-->数据类型、集合、深浅copy
一、数据类型
1、列表
lis = [11, 22, 33, 44, 55]
for i in range(len(lis)):
print(i) # i = 0 i = 1 i = 2
del lis[i]
print(lis) # [11,22,33,44,55] [22, 44, 55] [22, 44] 循环按照列表的索引0、1、2...循环删除,最后3 的时候元素不够报错
--->赋值
l1 = []
l2 = l1
l3 = l1
l3.append('a')
print(l1,l2,l3) #['a'] ['a'] ['a']
-->隔一个元素进行删除
lis = [11, 22, 33, 44, 55]
lis = lis[::2]
print(lis)
--->或者
lis = [11, 22, 33, 44, 55]
l1 = []
for i in lis:
if lis.index(i) % 2 == 0:
l1.append(i)
lis = l1
print(lis)
--->又或者
lis = [11,22,33,44,55]
for i in range(len(lis)-1,-1,-1):
if i % 2 == 1:
del lis[i]
print(lis)
2、字典
dic = dict.fromkeys([1,2,3],'春哥') #列表赋值
print(dic)
dic = dict.fromkeys([1,2,3],[])
print(dic) # {1: [], 2: [], 3: []}
dic[1].append('袁姐')
print(dic) #{1: ['袁姐'], 2: ['袁姐'], 3: ['袁姐']}
dic[2].extend('二哥')
print(dic) #{1: ['二', '哥'], 2: ['二', '哥'], 3: ['二', '哥']}
3、删除字典内指定键值组
--->第1种
dic = {'k1':'v1','k2':'v2','a3':'v3'}
dic1 = {}
for i in dic:
if 'k' not in i:
dic1.setdefault(i,dic[i])
dic = dic1
print(dic)
--->第2种
dic = {'k1':'v1','k2':'v2','a3':'v3'}
l = []
for i in dic:
if 'k' in i:
l.append(i)
for i in l:
del dic[i]
print(dic)
4、元组 (如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型)
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'> dic = dict.fromkeys([1,2,3,],3)
dic[1] = 4
print(dic) # {1: 4, 2: 3, 3: 3}
二、集合 (可变的数据类型,他里边的元素必须是不可变的数据类型,无序,不重复)
set1 = {1,2,3}
print(set1)
set2 = {1,2,3,[1,2,3],{'name':'alex'}} #错误表达方式,含有列表跟字典等可变数据类型
print(set2)
1、集合的增
set1 = {'peter','alex','jimmy','xiaoming'}
set1.add('老王') #第一种,直接增加元素
set1.update('abc') #第二种,拆分为最小元素增加
print(set1)
2、集合的删
set1 = {'peter','alex','jimmy','xiaoming'}
set1.pop() # 随机产出集合中某个元素,有返回值
print(set1.pop()) # 查看返回值
set1.remove('peter') #按照元素进行删除
set1.clear() # 清空集合 set()
del(set1) #删除整个集合
print(set1)
3、集合的查
set1 = {'peter','alex','jimmy','xiaoming'}
for i in set1: #顺序是变化的
print(i)
4、集合的交集
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2) #求set1 与 set2 的交集 {4, 5}
print(set1.intersection(set2)) #求set1 与 set2 的交集 {4, 5}
set3 = set2 & set1 #赋值set3
print(set3)
5、集合的并集
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2) #求set1 与 set2 的并集 {1, 2, 3, 4, 5, 6, 7, 8}
print(set1.union(set2)) #求set1 与 set2 的并集 {1, 2, 3, 4, 5, 6, 7, 8}
6、集合的反交集
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2) #求set1 与 set2 的反交集 {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2)) #求set1 与 set2 的反交集 {1, 2, 3, 6, 7, 8}
7、集合的差集
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2) #set1独有的 {1, 2, 3}
print(set1.difference(set2)) #set1独有的 {1, 2, 3}
print(set2 - set1) # set2 独有的 {8, 6, 7}
print(set2.difference(set1)) # set2 独有的 {8, 6, 7}
8、集合的子集与超集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 < set2) # set1 是set2 的子集 True
print(set1.issubset(set2)) # set1 是set2 的子集 True
print(set2 > set1) # set2 是set1 的超集 True
print(set2.issuperset(set1)) # set2 是set1 的超集 True
9、面试题---去掉列表重复的元素li = [1,22,22,33,45,66,66,90]
li = [1,22,22,33,45,66,66,90]
set1 = set(li)
li = list(set1)
print(li)
10、冻结功能
s = frozenset('peter')
print(s,type(s)) # 冻结 frozenset({'e', 'r', 'p', 't'}) <class 'frozenset'>
for i in s:
print(i)
三、深浅copy
1、赋值运算
l1 = [1,2,3]
l2 = l1
l1.append('a')
print(l1,l2)
print(l1 is l2) # [1, 2, 3, 'a'] [1, 2, 3, 'a'] l1 跟l2 是同一个地址的列表
2、copy
l1 = [1,2,3]
l2 = l1.copy()
print(l1,l2) # [1, 2, 3] [1, 2, 3]
print(l1,id(l1)) # [1, 2, 3] 18895432
print(l2,id(l2)) # [1, 2, 3] 18800456
print(l1 is l2) # False l1 跟l2 不是同一个地址的列表
l2.append('a')
print(l1,l2) # [1, 2, 3] [1, 2, 3, 'a']
3、浅度copy
l1 = [1,2,[4,5,6],3]
l2 = l1.copy()
print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 18960648
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 18960584
print(l1 is l2) # False l1 跟l2 不是同一个地址的列表
l1.append('a')
print(l1,l2) #[1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3]
l1[2].append('a')
print(l1,l2) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6, 'a'], 3]
print(id(l1[2])) #
print(id(l2[2])) # 18865736 l1、l2 列表中的子列表存放地址是相同的
print(l1[2] is l2[2]) # True 浅copy 时,列表中的子列表是相同地址的
4、深度copy
import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 19324552
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 19419208
l1[2].append('a')
print(l1,l2) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3] 深copy 时,列表中的子列表是不同地址的
5、小知识点
li = ['alex','taibai','wusir','egon']
for i in li:
print(li.index(i),i) # 索引从0 开始 for index,i in enumerate(li,1): # 索引加1 作为序号
print(index,i)
07、python的基础-->数据类型、集合、深浅copy的更多相关文章
- day7 基础数据类型&集合&深浅拷贝
基础数据类型汇总: #!/usr/bin/env python # -*- coding:utf-8 -*- ''' str int ''' # str s = ' a' print(s.isspac ...
- python基础数据类型--集合(set)
python基础数据类型--集合(set) 集合是一个数学概念由一个或多个确定的元素所构成的整体叫做集合 集合中的三个特征 1.确定性(元素必须死可hash) 2.互异性(去重) 3.无序性(集合中的 ...
- python的基础数据类型笔记
注意:此文章基于python3.0以上做的笔记. python的基础数据类型大体有一下几种 一.int int类型有以下几种方法 .bit_length 返回数据在内存中所占的比特位 如下: prin ...
- Python基础学习Day7 基础数据类型的扩展 集合 深浅copy
一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...
- 《Python》 基础数据类型补充和深浅copy
一.基础数据类型的补充 元组: 如果元组中只有一个数据,且没有逗号,则该‘元组’数据类型与里面的数据类型一致 列表: 列表之间可加不可减,可跟数字相乘 l1=['wang','rui'] l2=['c ...
- python之路(集合,深浅copy,基础数据补充)
一.集合:类似列表,元组的存储数据容器,不同点是不可修改,不可重复.无序排列. 1.创建集合: (1).set1 = {'abby', 'eric'} result:{'eric', 'abby'} ...
- python基础(三)编码,深浅copy
编码,深浅copy encode,decode在python2中使用的一些迷糊,python3中更容易理解 要理解encode和decode,首先我们要明白编码,字符和二进制的相关概念,简单来说,计算 ...
- Python 集合 深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- python集合深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
随机推荐
- HBase–RegionServer宕机恢复原理
Region Server宕机总述 HBase一个很大的特色是扩展性极其友好,可以通过简单地加机器实现集群规模的线性扩展,而且机器的配置并不需要太好,通过大量廉价机器代替价格昂贵的高性能机器.但也正因 ...
- MongoDB简单认识
MongoDB 为何物 NoSQL 泛指非关系型数据库,该词是关系型数据库(即 SQL)的相对称呼.MongoDB 是非关系型数据库中较为人熟知的一种. 它拥有很多优秀特性,例如高性能.高可用.支持丰 ...
- python使用消息队列RabbitMq(进阶)
import pika connection = pika.BlockingConnection(pika.ConnectionParameters( 'localhost')) channel = ...
- static关键字_1
static关键字 1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所以对象来说,static成员变量只有一份. 2.用static声 ...
- Django token 学前小知识
1,base64 '防君子不防小人' 方法 作用 参数 返回值 b64encode 将输入的参数转化为base64规则的串 预加密的明文,类型为bytes:例:b‘guoxiaonao’ base64 ...
- 牛客网挑战赛24 青蛙(BFS)
链接:https://www.nowcoder.com/acm/contest/157/E来源:牛客网 有一只可爱的老青蛙,在路的另一端发现了一个黑的东西,想过去一探究竟.于是便开始踏上了旅途 一直这 ...
- 同步任务 AsyncTask 介绍
AsyncTask 顾名思义,是在我们需要执行同步任务的时候使用,这个类可以做一些后台操作,然后将结果返回的UI来,因为这个类本身封装了Handler和Thread,所以我们不需要直接去操作这两个类, ...
- C#log4net的使用
一,下载log4net.dll,在项目中添加引用 二,在站点根目录添加,配置文件(log4net.xml), <file value="logs/logfile.txt"/& ...
- HttpClient 之 4.x.x版本以上的发送Https请求
https请求比http更安全 是在http的基础上加了SSL数据加密协议. http的连接很简单,是无状态的:HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比htt ...
- python实现WordCount(第三次作业)
0x00 注明 合作者:201631062315 201631062310 代码地址:https://gitee.com/c1e4r/word-count2 作业地址:https://edu.cnbl ...