enumerate 函数用于遍历序列中的元素以及它们的下标:

>>> for i,j in enumerate(('a','b','c')):
 print i,j

0 a
1 b
2 c
>>> for i,j in enumerate([1,2,3]):
 print i,j

0 1
1 2
2 3
>>> for i,j in enumerate({'a':1,'b':2}):
 print i,j

0 a
1 b

>>> for i,j in enumerate('abc'):
 print i,j

0 a
1 b
2 c

集合、有序字典、可命名元祖、计数

 #!/usr/bin/env python3.5
# -*-coding:utf8-*-
# s1 = set() # 集合 是一个无序且不重复的元素集合
# s1.add("alex")
# print("s1")
# s1.add("alex")
# print("s1")
# set() # 访问速度快,天生解决了重复问题 # 用于爬虫等s2 =
# s2 = set(["alex", "eric", "tony"])
#print(s2)
# s3 = s2.difference(["alex", "eric"]) # difference 没有改变原来的元数,生成了一个生的元素(集合)
# print(s3)
# # {'tony', 'alex', 'eric'}
# # {'tony'}
# s4 = s2.difference_update(["alex", "eric"]) # 不生成新的内容,而是改变原有集合的内容 ,删除当前SET中的所有包含在参数集合里的元素
# print(s2)
# print(s4)
# s5 = s2.intersection(["alex", "eric"]) # 新建一个取相同的部分
# print(s5)
# s6 = s2.intersection_update(["alex", "eric"]) # 更新原来的取相同部分
# print(s2) # b = {"1":"2","2":5}
# c = {"1":"2","2":6}
# c.update(b)
# print(b)
# print(c) # import collections
# obj = collections.Counter(["afad", "adfas"])
# print(obj) # 字典
# obj.update(["afad", "ad2adf"]) # 更新计数
# print(obj)
# obj.subtract(["afad", "adfa"]) # 删除计数
# print(obj)
# ret = obj.most_common(4)
# print(ret)
# for k in obj.elements():
# elements =>原生值
# print(k) # 循环取出从多到少的各个元素
# for k, v in obj.items():
# print(k, v) # 取字典键与值
# import collections
# # 有序字典
# dic = collections.OrderedDict()
# dic['k1'] = 'v1'
# dic['k2'] = 'v2'
# dic['k3'] = 'v3'
# print(dic)
# dic.popitem() # 后进先出
# print(dic)
# dic.pop('k2')
# print(dic)
# help(collections.OrderedDict())
# 内部用列表来维护有序字典
# dic = {"k1": []}
# dic["k1"].append("alex")
# import collections
# dic = collections.defaultdict(list) # 设置字典默认值为空列表
# dic["k1"].append("alex")
# print(dic) # 可命名元祖 意思是 对元祖的元素命名 以后可以直接调名字
# import collections
# mytupleclass = collections.namedtuple('mytupleclass', ['x', 'y', 'z']) # 创建类等同于 defaultdict
# print(help(mytupleclass))
# obj = mytupleclass(11, 22, 33)
# print(obj.x)
# print(obj.y)
# print(obj.z)
# # 主要用于坐标 # 队列 分双向队列与单向队列
# import collections
# d = collections.deque() # 创建双向队列
# d.append("1")
# d.append("10")
# d.append("1")
# d.append("10")
# r = d.count("1")
# # print(r)
# d.extend(["yy", "uu", "ii"])
# d.appendleft("ad")
# d.appendleft("12")
# d.extendleft(["adf", "1111", "222"])
# print(d)
# #print(help(d)) # 单向队列FIFO
# 生产者消费者模型
# import queue
# q = queue.Queue() # 创建单向队列
# # print(help(q))
# q.put('123')
# q.put("678")
# print(q.qsize()) # 获取队列大小
# print(q.get()) # 获取队列值

课上作业:

 #!/usr/bin/env python3.5
# -*-coding:utf8-*-
# 数据库中原有
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 },
}
#1、原来没有 ->〉新加的插入
#2、原来有 ->〉更新
#3、新的无,原来有 =>把原来的删除掉
#需求
#要更新的数据
#要删除的数据
#要添加的数据
#交集、差集
old = set(old_dict.keys()) # 将旧的字典创建集合
new = set(new_dict.keys()) # 将新的字典创建集合
# 交集:要更新的数据,即把原来的更新为最新的数据
# 差集:原来的数据删除,新的数据进行添加
# delete_set = old.difference(update_set) # 差集,创建新对象,获取旧的字典里存在的且不在交集里面的,这种方式是通过循环去比较
# add_set = new.difference(update_set) # 差集,创建新对象,获取新的字典里存在的且不在交集里面的
# 交集
update_set = old.intersection(new) # 取交集
delete_set = old.symmetric_difference(update_set) # 差集,创建新对象,获取旧的字典里存在的且不在交集里面的,对称差集
add_set = new.symmetric_difference(update_set) # 差集,创建新对象,获取新的字典里存在的且不在交集里面的,对称差集
# print(update_set) # 需要更新的
# print(delete_set) # 需要删除的
# print(add_set) # 需要增加的
# 更新
for i in update_set:
b = new_dict.get(i)
c = old_dict.get(i)
if b == c:
continue
else:
c.update(b) # 将对应旧字典的数据进行更新
# print(new_dict)
# print(old_dict)
# print(b)
# print(c)
# 删除
for i in delete_set:
old_dict.pop(i) # 删除旧的不存在的字典数据
# print(old_dict)
# 添加
for i in add_set:
old_dict.update(new_dict) # 将对应旧字典的数据进行更新 print("new_dict:\n %s" % new_dict)
print("old_dict:\n %s" % old_dict)

深浅拷贝:

 #!/usr/bin/env python3.5
# -*-coding:utf8-*-
import copy
# copy.copy() # 浅拷贝 只拷贝一层
# copy.deepcopy() # 深拷贝 有多层就拷贝多少份
# = # 赋值
# a1 =12324
# a3 = copy.copy(a1)
# print(a1)
# print(a3)
# # 其它,元祖,列表,字典……
# n1 = {"k1": "12", "k2": "2212", 'k3': ["112", ["adfa", "1231234"]]}
# n2 = n1
# print(id(n1))
# print(id(n2))
# n3 = copy.copy(n1)
# n3 = copy.deepcopy(n1)
# print(id(n1))
# print(id(n3))
# print(id(n1["k3"]))
# print(id(n3["k3"]))
# print(id(n1["k3"][1]))
# print(id(n3["k3"][1]))
# print(n1["k3"][1])
# 监控模板 深浅拷贝
#
# dic = {
# "cpu": [80],
# "mem": [80],
# "disk": [80]
# }
# print("brefor:",dic)
# new_dic = copy.deepcopy(dic)
# new_dic['cpu'][0] = 50
# print(new_dic)

python 函数/列表的应用的更多相关文章

  1. Python函数——列表推导式、生成器与迭代器

    列表推导式 产生背景 现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求你把列表里的每个值加1,你怎么实现? 第一种方法: a = [1,3,4,6,7,7,8,9 ...

  2. python函数 | 列表生成式

    在编写程序或者查看别人的程序时,经常会遇到列表生成式,这个使用起来并不复杂,但是非常有用,使我们的代码更加简洁灵活.很多python使用者并不太会使用它.今天,就给大家详细讲解列表生成式和生成器表达式 ...

  3. python函数中把列表(list)当参数时的"入坑"与"出坑"

    在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...

  4. python函数2(返回值、传递列表...)

    python函数2(返回值.传递列表...) 1.返回值 1.1.返回简单的值 #返回简单值 def get_formatted_name(first_name,last_name): "& ...

  5. (python函数02)列表生成式

    (python函数02)列表生成式 示例代码  num = [i for i in range(1, 10)] print(num) ​ num = [i for i in range(1, 10) ...

  6. python中列表(list)函数及使用

    序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...

  7. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  8. Python函数讲解

    Python函数

  9. Python list列表的排序

    当我们从数据库中获取一写数据后,一般对于列表的排序是经常会遇到的问题,今天总结一下python对于列表list排序的常用方法: 第一种:内建函数sort() 这个应该是我们使用最多的也是最简单的排序函 ...

随机推荐

  1. android 界面布局

    一.LinearLayout LinearLayout 又称作线性布局,是一种非常常用的布局,它所包含的控件在线性方向上依次排列. android:orientation="horizont ...

  2. Android对px和dip进行尺寸转换的方法

    px  转换为 dip /** * PX 转换为 DP * * @param context * @param px * @return */ public static int px2dp(Cont ...

  3. spring+springmvc+mybatis整合框架搭建

    由于例子是基于Maven搭建的,所以首先是pom.xml文件的依赖信息: <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  4. 汇总前端最最常用的JS代码片段-你值得收藏

    原始出处,可拷贝:http://www.w3cfuns.com/notes/25068/1d0d350a974d879e63f1115cf80a3288.html 摘自:http://www.love ...

  5. 【Python】使用多个迭代器

    如果要达到多个迭代器的效果,__iter__()只需替迭代器定义新的状态对象,而不是返回self class SkipIterator: def __init__(self, wrapped): se ...

  6. [DP之计数DP]

    其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...

  7. MFC 自定义控件

    需要在MFC实现自定义控件功能,网上搜集找的如下方法实现: 以下是步骤说明. 一.自定义一个空白控件  1.先创建一个MFC工程 NEW Project-->MFC-->MFC Appli ...

  8. Objective-C Runtime 运行时之一:类与对象(转载)

    Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...

  9. window下面配置sftp

    Windows  下 搭建 基于  ssh 的sftp 服务器,服务器端可以用 freesshd,F-secure server 等,filezilla server不可用,之前傻乎乎的用filezi ...

  10. 关于手动关闭BootStrap模态框

    在网上找手动关闭BootStrap模态框的解决方法,说是(需要引用bootstrap.js等): $("#myModal").modal('hide'); 但是我发现我的只能关闭 ...