一、set集合:

set是一个无序且不重复的元素集合

建立一个集合:
x = set([1, 'tom', 2, 3, 4])
print(type(x))
print(x)
以上实例运行后反回结果结果为:
<class 'set'>
{'tom', 1, 2, 3, 4}

集合(set)

set集合整数可以做以下操作:

add函数:把要传入的元素做为一个整体添加到集合中
x = set([1, 'tom', 2, 3, 4])
y = ('address',)
x.add(y)
x.add('number')
print(x)
以上实例运行后反回结果结果为:
{1, 2, 3, 4, 'tom', 'number', ('address',)} clear()函数:清除集合元素:
x = set([1, 'tom', 2, 3, 4])
x.clear()
print(x)
以上实例运行后反回结果结果为:
set() copy()函数:拷贝一个对象
x = set([1, 'tom', 2, 3, 4])
y = x.copy()
print(y)
以上实例运行后反回结果结果为:
{'tom', 1, 2, 3, 4}
注:copy函数会在下面做详细讲解。 difference()函数:对比两个列表的差集:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
z = x.difference(y)
print(z)
以上实例运行后反回结果结果为:
{1, 2} symmetric_difference()函数:对比两个列表对称差集:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
z = x.symmetric_difference(y)
print(z)
以上实例运行后反回结果结果为:
{1, 2, 5, 6}
注:difference()与symmetric_difference()都是做差集,当x与y做比较时如果用difference函数只会取出x有而y没有的元素。而sysmmetric difference 函数是对称差集,会取出互相都没有的元素。 difference_update()函数:对比两个列表的差集
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
x.difference_update(y)
print(x)
以上实例运行后反回结果结果为:
{1, 2}
注:difference_update函数是将返回值放到原变量内,而difference是需要赋给一个新的列表。 symmetric_difference_update()函数:对比两个列表的对称差集:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
x.symmetric_difference_update(y)
print(x)
以上实例运行后反回结果结果为:
{1, 2, 5, 6}
注:symmetric_difference_update函数是将返回值放到原列表内,而symmetric_difference是需要赋给一个新的列表。 discard()函数:删除元素:
x = set([1, 2, 3, 4, 'tom',])
x.discard('tom')
print(x)
以上实例运行后反回结果结果为:
{1, 2, 3, 4} intersection()函数:获取两个列表交集:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
z = x.intersection(y)
print(z)
以上实例运行后反回结果结果为:
{3, 4, 'tom'} intersection_update()函数:获取两个列表交集:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
x.intersection_update(y)
print(x)
以上实例运行后反回结果结果为:
{'tom', 3, 4}
注:intersection_update函数是将返回值放到原列表内,而intersection_是需要赋给一个新的列表。 isdisjoint()函数:如果两个列表有交集反回False,如果有交集反回True:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
z = set([7, 8])
s1 = x.isdisjoint(y)
s2 = x.isdisjoint(z)
print('有交集:',s1)
print('无交集:',s2)
以上实例运行后反回结果结果为:
有交集: False
无交集: True issubset()函数:判断是不是子集:
x = set([1, 2, 3,])
y = set(['tom', 3, 4, 5, 6,])
z = set([1, 2, 3, 4, 'tom',])
s1 = x.issubset(y)
s2 = x.issubset(z)
print('不是子集:',s1)
print('是子集:',s2)
注:如果x列表的元素全部包含在z列表中说明是子集返回True,反之则返回False
以上实例运行后反回结果结果为:
不是子集: False
是子集: True pop()函数:随即删除列表内的一个元素:
x = set([1, 2, 3, 4, 'tom',])
x.pop()
print(x)
以上实例运行后反回结果结果为:
{2, 3, 4, 'tom'} remove()函数:删除指定元素:
print('以上实例运行后反回结果结果为:')
x = set([1, 2, 3, 4, 'tom', 'earl'])
x.remove('tom')
print(x)
以上实例运行后反回结果结果为:
{1, 2, 3, 4, 'earl'} union()函数:取两个列表并集:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
s1 = x.union(y)
print('并集:',s1)
以上实例运行后反回结果结果为:
并集: {1, 2, 3, 4, 5, 6, 'tom'}
注:union函数是将两个列表合并,排除重复元素。 update()函数:将一个列表更新到另一个列表中:
x = set([1, 2, 3, 4, 'tom',])
y = set(['tom', 3, 4, 5, 6,])
x.update(y)
print(x)
注:update函数是将返回值放到原列表内去除重复元素,而union也是去除重复元素并赋给一个新的列表。

集合(set)

练习:寻找差异

# 数据库中原有:
old_dict = {
"#1":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 },
"#2":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 },
"#3":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 },
} # cmdb 新汇报的数据:
new_dict = {
"#1":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 800 },
"#3":{ 'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80 },
"#4":{ 'hostname': 'c2', 'cpu_count': 2, 'mem_capicity': 80 }
}

练习:寻找差异

需要删除:new_dict没有old_dict都存在的Key。
需要添加:new_dict有old_dict没有的Key。
需要更新:new_dict有old_dict也有的Key。
old_set = set(old_dict.keys())
update_list = list(old_set.intersection(new_dict.keys())) new_list = []
del_list = [] for i in new_dict.keys():
if i not in update_list:
new_list.append(i) for i in old_dict.keys():
if i not in update_list:
del_list.append(i) print(update_list, new_list, del_list)

dome

二、collections模块:

1、计数器(counter)

Counter是对字典类型的补充,用于追踪值的出现次数。

注:Counter具备字典的所有功能 + 自己的功能

Counter实例:

import collections
c = collections.Counter('slfjslfjsljfsfowjfwjflsjflsjflsjf')
print(c) 或 from collections import Counter
c = Counter('slfjslfjsljfsfowjfwjflsjflsjflsjf')
print(c)
以上两个实例运行后反回结果结果为:
Counter({'f': 9, 'j': 8, 's': 7, 'l': 6, 'w': 2, 'o': 1})

实例(Counter)

Counter函数可以做以下操作:

 Counter()函数:返回一个迭代器。元素被重复了多少次,在该迭代器中就包含多少个该元素
from collections import Counter
x = Counter('1212abacdc')
y = list(x.elements())
print(y)
以上实例运行后反回结果结果为:
['', '', 'c', 'c', 'a', 'a', '', '', 'd', 'b'] update()函数:相加,原来存在的增加一个,没有的添加新的。
from collections import Counter
x = Counter('1212abcdc')
print(x)
x.update('agt')
print(x)
以上实例运行后反回结果结果为:
Counter({'': 2, 'c': 2, '': 2, 'd': 1, 'b': 1, 'a': 1})
Counter({'': 2, 'c': 2, 'a': 2, '': 2, 'g': 1, 't': 1, 'd': 1, 'b': 1}) subtract()函数:相减,原来存在的减一个,没有的则为负数。
from collections import Counter
x = Counter('1212abcdc')
print(x)
x.subtract('12agt')
print(x)
以上实例运行后反回结果结果为:
Counter({'c': 2, '': 2, '': 2, 'a': 1, 'b': 1, 'd': 1})
Counter({'c': 2, 'b': 1, '': 1, '': 1, 'd': 1, 'a': 0, 't': -1, 'g': -1}) copy()函数:浅拷贝
from collections import Counter
x = Counter('1212abcdc')
y = x.copy()
print(x)
print(y)
以上实例运行后反回结果结果为:
Counter({'c': 2, '': 2, '': 2, 'd': 1, 'b': 1, 'a': 1})
Counter({'c': 2, '': 2, '': 2, 'd': 1, 'b': 1, 'a': 1})

计数器(Counter)

2、有序字典(orderedDict):

说明:OrderedDict是collections中的一个包,能够记录字典元素插入的顺序,常常和排序函数一起使用,来生成一个排序的字典。

from collections import OrderedDict
dic = OrderedDict({'k1':'v1'})
dic['k2'] = 'v2'
dic['k3'] = 'v3'
print('有序字典:')
for k,v in dic.items():
print('%s:%s' %(k, v)) dic_new = {'k1':'v1'}
dic_new['k2'] = 'v2'
dic_new['k3'] = 'v3'
print('无序字典:')
for k,v in dic_new.items():
print('%s:%s' %(k, v))
以上实例运行后反回结果结果为:
有序字典:
k1:v1
k2:v2
k3:v3
无序字典:
k3:v3
k1:v1
k2:v2

有序字典

注:有序字典会根据key与valuse加入先后排序排序,如果是同时加入就需要指定排序值。

from collections import OrderedDict
dic = OrderedDict({'k1':'v1'})
dic['k3'] = 'v3'
dic['k2'] = 'v2'
print('有序字典:')
for k,v in dic.items():
print('%s:%s' %(k, v)) dic_new = {'k1':'v1'}
dic_new['k2'] = 'v2'
dic_new['k3'] = 'v3'
print('无序字典:')
for k,v in dic_new.items():
print('%s:%s' %(k, v))
以上实例运行后反回结果结果为:
有序字典:
k1:v1
k3:v3
k2:v2
无序字典:
k1:v1
k3:v3
k2:v2

加入顺序实例:

3、默认字典(defaultdict)

defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。

需求:

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
即: {'k1': 大于66 , 'k2': 小于66}
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = {}
for value in values:
if value > 66:
if 'k1' in my_dict.keys():
my_dict['k1'].append(value)
else:
my_dict['k1'] = [value]
else:
if 'k2' in my_dict.keys():
my_dict['k2'].append(value)
else:
my_dict['k2'] = [value] print(my_dict) 以上实例运行后反回结果结果为:
{'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55, 66]}

原生字典解决方法

from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in values:
if value > 66:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value) print(my_dict) 以上实例运行后反回结果结果为:
defaultdict(<class 'list'>, {'k1': [77, 88, 99, 90], 'k2': [11, 22, 33, 44, 55, 66]})

defaultdict字典解决方法

三、深浅拷贝:

拷贝模块copy:

copy分为浅拷贝与深拷贝:

1、浅拷贝只拷贝一层:

例如:

import copy
x = ['a', 'b', [1, 2, 3,],]
y = copy.copy(x)
print(id(x))
print(id(y))
print(id(x[2]))
print(id(y[2]))
以上实例运行后反回结果结果为:
12559112
8548680
12561288
12561288
注:以上反回结果可以看出来,浅拷贝只有列表第一层在内的ID值发生了变化,而第二层的内存ID值确没有变化。

浅拷贝(copy)

2、深拷贝是拷贝所有元素质:

import copy
x = ['a', 'b', [1, 2, 3,],]
y = copy.deepcopy(x)
print(id(x))
print(id(y))
print(id(x[2]))
print(id(y[2]))
以上实例运行后反回结果结果为:
17474312
17474824
17475720
17475784
注:深拷贝产生的列表所有元素在内存的ID值都发了变化。

深拷贝(deepcopy)

 

Python学习之路——字符处理(二)的更多相关文章

  1. Python学习之路——字符处理(一)

    一.整数: 例如:1.10.30 整数可以做以下操作: bit_length函数:返回该整数占用的最少位数: >>> x=100 >>> x.bit_length( ...

  2. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  3. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  4. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  5. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  6. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  7. python学习之路------你想要的都在这里了

    python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...

  8. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  9. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴....

随机推荐

  1. elk 分布式部署

    这个logstash 读取日志 是增量的 还是怎么读的? 定时每秒读增量 机器配置: elasticsearch-192.168.32.80 elasticsearch-192.168.32.81 e ...

  2. Shell 脚本小试牛刀(番外) -- 捷报

    捷报 捷报 捷报 捷报 捷报 捷报来袭,本系列的脚本已在Github 上开了版块, 我命名为" easy shell "(点此进入). 眼下已加入前面几期中的脚本,日后还会有很多其 ...

  3. javascript绑定事件

    本质:不同的库或者工具中总是封装了不同的事件绑定形式,但是究其根源,还是IE事件模型和W3C事件模型不同的处理方式 1)W3C事件模型:支持事件捕捉和冒泡 addEventListener('type ...

  4. Javascript数组的声明

    var cars=new Array(); cars[0]="Audi"; cars[1]="BMW"; cars[2]="Volvo"; ...

  5. Visual Studio的ASP.NET修改默认打开浏览器

    1.新建web空应用程序,输入项目名称. 2.右击项目名称,添加“新建项”—一般处理程序 3.右击新建一个HTML文件,任意命名. 4.右击新建的Html文件,选择“浏览方式” 5.选择后弹出浏览器选 ...

  6. Random类短时间大量随机重复的问题

    先声明一下,我是在那篇文章上看到的解决方法: http://dl.download.csdn.net/down10/20141103/4b173214e41ff3207305c2470524b0f3. ...

  7. If the server requires more time, try increasing the timeout in the server editor

    双击服务器,在overview下的Timeouts中的Start选项,改成10000或者较大就可以了.防止服务器自启动频繁.

  8. bootstrap table笔记

    获取选中行:$table.bootstrapTable('getSelections');

  9. [Swust OJ 582]--放学了,抢机子了(SPFA)

    题目链接:http://acm.swust.edu.cn/problem/0582/ Time limit(ms): 5000 Memory limit(kb): 65535   Descriptio ...

  10. linux怎样修改用户权限

    ls -l  查看目录下的文件详细信息 ll 同上 whoami 功能说明:先似乎用户名称. 语 法:whoami [--help][--version] 补充说明:显示自身的用户名称,本指令相当于执 ...