python之路day2_python之路day07-集合set的增删查、列表如何排重(效率最高的方法)、深浅copy...

集合set

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

去重,把一个列表变成集合,就自动去重了。

关系测试,测试两组数据之前的交集、差集、并集等关系。

1,集合的创建。

set1 = set({1,2,'barry'})

set2 = {1,2,'barry'}

print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'}

2,集合的增。

set1 = {'alex','wusir','ritian','egon','barry'}

set1.add('景女神')

print(set1)

#update:迭代着增加

set1.update('A')

print(set1)

set1.update('老师')

print(set1)

set1.update([1,2,3])

print(set1)

3,集合的删。

set1 = {'alex','wusir','ritian','egon','barry'}

set1.remove('alex') # 删除一个元素

print(set1)

set1.pop() # 随机删除一个元素

print(set1)

set1.clear() # 清空集合

print(set1)

del set1 # 删除集合

print(set1)

4,集合的其他操作:

4.1 交集。(& 或者 intersection)

set1 = {1,2,3,4,5}

set2 = {4,5,6,7,8}

print(set1 & set2) # {4, 5}

print(set1.intersection(set2)) # {4, 5}

4.2 并集。(| 或者 union)

set1 = {1,2,3,4,5}

set2 = {4,5,6,7,8}

print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7,8}

print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7,8}

4.3 差集。(- 或者 difference)

set1 = {1,2,3,4,5}

set2 = {4,5,6,7,8}

print(set1 - set2) # {1, 2, 3}

print(set1.difference(set2)) # {1, 2, 3}

4.4反交集。 (^ 或者 symmetric_difference)

set1 = {1,2,3,4,5}

set2 = {4,5,6,7,8}

print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}

print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}

4.5子集与超集

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超集。

5,frozenset不可变集合,让集合变成不可变类型。

s = frozenset('barry')

print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'})

ps:列表排重效率最高的方法(先转换成集合,在转换回来)

li = [1,2,3,3,4,4,77]

set1=set(li)

print(set1) #{1, 2, 3, 4, 77}

l1=list(set1)

print(l1) #[1, 2, 3, 4, 77]

深浅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。

#同一代码块下:

l1 = [1, '太白', True, (1,2,3), [22, 33]]

l2 = l1.copy()

print(id(l1), id(l2)) # 2713214468360 2713214524680

print(id(l1[-2]), id(l2[-2])) # 2547618888008 2547618888008

print(id(l1[-1]),id(l2[-1])) # 2547620322952 2547620322952

# 不同代码块下:

>>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]

>>> l2 = l1.copy()

>>> print(id(l1), id(l2))

1477183162120 1477183162696

>>> print(id(l1[-2]), id(l2[-2]))

1477181814032 1477181814032

>>> print(id(l1[-1]), id(l2[-1]))

1477183162504 1477183162504

对于浅copy来说,只是在内存中重新创建了开辟了一个空间存放一个新列表,但是新列表中的元素与原列表中的元素是公用的。

3,深拷贝deepcopy。

# 同一代码块下

import copy

l1 = [1, 'alex', True, (1,2,3), [22, 33]]

l2 = copy.deepcopy(l1)

print(id(l1), id(l2)) # 2788324482440 2788324483016

print(id(l1[0]),id(l2[0])) # 1470562768 1470562768

print(id(l1[-1]),id(l2[-1])) # 2788324482632 2788324482696

print(id(l1[-2]),id(l2[-2])) # 2788323047752 2788323047752

# 不同代码块下

>>> import copy

>>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]

>>> l2 = copy.deepcopy(l1)

>>> print(id(l1), id(l2))

1477183162824 1477183162632

>>> print(id(0), id(0)) #int类型,不可变数据类型

1470562736 1470562736

>>> print(id(-2), id(-2)) #元组 不可变数据类型

1470562672 1470562672

>>> print(id(l1[-1]), id(l2[-1])) #列表 可变数据类型

1477183162120 1477183162312

对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。

Python之路 day2 集合的基本操作

#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa ''' #集合是无序的 集合的关系测试, 增加,删除,查找等操作 ''' #列表去重 ...

Python之路Day07

基础数据类型补充 str s.capitalize() -- 首字母大写 s.title() -- 每个单词首字母大写 s.swapcase() -- 大小写转换 s.center() -- 居中/填 ...

MVC学习之路(1) EF 增删查改合集

首先再Model中创建一个类[WMBlogDB] public class WMBlogDB : DbContext { //连接字符串. public WMBlogDB() : base(&quot ...

python之路day05--字典的增删改查,嵌套

字典dic 数据类型划分:可变数据类型,不可变数据类型 不可变数据类型:元组,bool,int str -->可哈希可变数据类型:list,dict,set --> 不可哈希 dict k ...

python之路day04--列表的增删改查,嵌套、元组的嵌套、range、for循环嵌套

列表增删改查 增加 append li = ['taibai','zy','nvshen'] li.append('aa') print(li) #['taibai', 'zy', 'nvshen', ...

Python 列表元素排重uniq

# -*- coding: gbk -*- def uniq(ls): lsCopy=[e for e in ls] for i in xrange(1,len(ls)): for j in xran ...

EF增删查改加执行存储过程和sql语句,多种方法汇总

ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTim ...

总结day6 ---- set集合&comma;基本类型的相互转化&comma;编码&comma;数据类型总结&comma;循环时候不要动列表或者字典&comma;深浅copy

python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,比如你利用id ...

NO&period;3:自学python之路------集合、文件操作、函数

引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...

随机推荐

alibaba-dexposed 原理解析

alibaba-dexposed 原理解析 使用参考地址: http://blog.csdn.net/qxs965266509/article/details/49821413 原理参考地址: htt ...

C语言 ---- 基本数据类型和基本运算 iOS学习-----细碎知识点总结

// 导入头文件(stdio.h),标准输入输出的头文件,#include // 程序的入口int main(int argc, const char * argv[] ...

&lpar;oracle&sol;mysql&rpar;启停&comma;导入导出&comma;DB字符集

==================================================================================== DB启动停止 ======== ...

android JSONArray JSONObject 字符串转json数组 遍历json对象

String json = "{''data'':[{''name'':''Wallace''},{''name'':''Grommit''}]}"; StringBuffer m ...

NOI剑客决斗

http://acm.nyist.net/JudgeOnline/problem.php?pid=110 剑客决斗 时间限制:5000 ms  |  内存限制:65535 KB 难度:5   描述 在 ...

lintcode:打劫房屋 III

题目 打劫房屋 III 在上次打劫完一条街道之后和一圈房屋之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子组成的区域比较奇怪,聪明的窃贼考察地形之后,发现这次的地形是一颗二叉树.与前两次偷窃 ...

Direct2D DirectWrite绘制文字

绘制文本使用DirectWrite: 为了简化 DirectWrite 的使用,RenderTarget有3个方法可以直接绘制文本: DrawText,用于简单绘制,支持Unicode. DrawTe ...

MVC为什么不再需要注册通配符(&ast;&period;&ast;)了?

MVC为什么不再需要注册通配符(*.*)了? 文章内容 很多教程里都提到了,在部署MVC程序的时候要配置通配符映射(或者是*.mvc)到aspnet_ISPAI.dll上,在.NET4.0之前确实应该 ...

js:通过正则匹配获取页面的url中的参数

简介:获取页面参数 原生js: //通过正则匹配获取当前页面的url中的参数 function getUrlParam(name){ var reg = new RegExp("(^|&am ...

●BZOJ 3796 Mushroom追妹纸

题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3796 题解: 题意:    给出三个串 A,B,C    找出一个最长串 S,    使得 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值