首页 > 代码库 > python学习笔记:Day02
python学习笔记:Day02
一.列表(list)
1.定义一个列表
name=["tom","jerry","12","13","lose","me"]
2.索引
与字符串的索引一样,列表索引从0开始。
print ("第一个元素:%s"%name[0]) >>第一个元素:tom
print ("最后一个元素:%s"%name[-1])
>>最后一个元素:me
3.切片
consequence[start_index: end_index: step]
print (name[1:3]) >>["jerry","12"] #顾首不顾尾 print (name[-2:-1]) >>["lose"]
4.追加
list.append()
5.删除
del list[index]
list.pop(index)
list.remove(obj) 移除列表中的第一个匹配项
del name[-1] print (name) >>["tom","jerry","12","13","lose"] name.append("me") print (name) >>["tom","jerry","12","13","lose","me"] name.pop(-1) print (name) >>["tom","jerry","12","13","lose"]
6.转换字符串
name_str = ",".join(name) #以,作为分隔符 print (name_str) >>tom,jerry,12,13,lose
7.取列表下标
enumerate(list) 取列表下标
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中
1.定义一个字典
d = {key1 : value1, key2 : value2 }
2.字典是无序的,通过key来寻找值
user = {"tom":"12","jerry":"15"} print (user[tom]) >>12
3.修改字典
name={‘tom‘:"85", ‘jerry‘:"90", ‘laowang‘:"100"} #增加 name[‘laoli‘] = "60" print (name) >>{‘tom‘: ‘85‘, ‘laoli‘: ‘60‘, ‘jerry‘: ‘90‘, ‘laowang‘: ‘100‘} #删除 del name[‘laoli‘] print (name) >>{‘jerry‘: ‘90‘, ‘tom‘: ‘85‘, ‘laowang‘: ‘100‘}
4.字典的key
1)不允许同一个key出现两次。创建时如果同一个key被赋值两次,后一个值会被记住
name={‘tom‘:"85", ‘jerry‘:"90", ‘laowang‘:"100"} print (name[‘tom‘]) name[‘tom‘] = "error" print (name[‘tom‘]) >>85 >>error
2) key必须不可变,可以用数字,字符串或元组充当,所以用列表就不行
5.常用操作
dict.items() 将dict的key和value转换成列表的形式显示
dict.get(key) 查找key,如果存在则返回其value,否则None
dict1.update(dict2) 字典合并
dict1={"1":"Tom", "2":"Jerry"} dict2={"1":"laowang", "3":"laoli"} dict1.update(dict2) #key存在则更新为后者的value,不存在则创建 print (dict1) >>{‘2‘: ‘Jerry‘, ‘1‘: ‘laowang‘, ‘3‘: ‘laoli‘}
三.遍 历
1.遍历列表
stu = ["tom","jerry","laoli","laowang"] for i in stu: print(i)
2.遍历字典
遍历dict和遍历列表差不多,只是dict是key-value结构,同时打印key和value
dict = {‘1‘:"tom", ‘2‘:"jerry", } #打印key-value for i,item in dict.items(): print("%s-%s"%(i,item)) >>1-tom >>2-jerry #只打印key for i in dict: print (i) >>1 >>2
四.集合(set)
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合,同时集合是无序的
set1 = set([1,2,3]) print(set1) >>{1, 2, 3}
重复元素在set中自动被过滤
set1 = set([1,1,1,2,3]) print (set1) >>{1,2,3} #增加 set1.add(4) print (set1) >>{1,2,3,4} #增加重复元素 set1.add(2) print (set1) >>{1,2,3,4}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
set1 = set([1,2,3]) set2 = set([2,3,4]) print(set1.intersection(set2))#交集 >>{2,3} print(set1.union(set2)) #并集 >>{1,2,3,4} print(set1.difference(set2))#差集 in set1 but not in set2 >>{1} print(set1.issubset(set2))#子集 >>false print(set1.issuperset(set2))#父集 >>false print(set1.issuperset(set2))#超集 >>false print(set1.symmetric_difference(set2))#对称差集,将双方没有的列出来 >>{1,4}
五.元组(tuple)
元组是另外一种序列表,一旦初始化不允许修改
#创建元祖 tup = (‘tom‘, ‘jerry‘)
六.深浅copy
参考地址:http://www.cnblogs.com/DswCnblog/p/6204120.html
参考地址:http://www.cnblogs.com/Eva-J/p/5534037.html
1.传值和传址
传值就是传入一个参数的值
传址就是传入一个参数的地址也就是内存的地址(相当于指针)。
他们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变,用传值传入的参数是不会改变的,用传址传入就会
2.Python是不允许程序员选择采用传值还是传址的。
Python参数传递采用的方式相当于传值和传址的一种综合。
如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于传址。
如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于传值。
3.浅copy
dict1 = {"1":"wuhan", "2":"beijing", "3":{"changsha":{}, "shanghai":{},} } dict2 = dict1.copy() dict2["3"]["changsha"] = "copy" print (dict1) print (dict2) >>{‘3‘: {‘shanghai‘: {}, ‘changsha‘: ‘copy‘}, ‘1‘: ‘wuhan‘, ‘2‘: ‘beijing‘} >>{‘3‘: {‘shanghai‘: {}, ‘changsha‘: ‘copy‘}, ‘1‘: ‘wuhan‘, ‘2‘: ‘beijing‘}
接着看
dict2["3"] = "copy" print (dict1) print (dict2) >>{‘1‘: ‘wuhan‘, ‘3‘: {‘changsha‘: {}, ‘shanghai‘: {}}, ‘2‘: ‘beijing‘} >>{‘1‘: ‘wuhan‘, ‘3‘: ‘copy‘, ‘2‘: ‘beijing‘}
浅copy是对传值和传址的一个很好的说明
dict1["1"],dict["2"]的值都是一个不可变量,因此在内存中分一块空间,用于存dict1["1"],dict["2"]的值
dict1["3"]是一个可变的字典,虽然同样会在内存在划分一块空间,但是存储的是该字典在内存中的地址,当对他进行修改时,dict1同样也会发生变化
4.深copy
import copy dict1 = {"1":"wuhan", "2":"beijing", "3":{"changsha":{}, "shanghai":{},} } dict2 = copy.deepcopy(dict1) dict2["3"]["changsha"] = "copy" print (dict1) print (dict2) >>{‘1‘: ‘wuhan‘, ‘3‘: {‘changsha‘: {}, ‘shanghai‘: {}}, ‘2‘: ‘beijing‘} >>{‘1‘: ‘wuhan‘, ‘3‘: {‘changsha‘: ‘copy‘, ‘shanghai‘: {}}, ‘2‘: ‘beijing‘}
深拷贝就是在内存中重新开辟一块空间,不管数据结构多么复杂,只要遇到可能发生改变的数据类型,就重新开辟一块内存空间把内容复制下来,直到最后一层,不再有复杂的数据类型,就保持其原引用。这样,不管数据结构多么的复杂,数据之间的修改都不会相互影响
python学习笔记:Day02