首页 > 代码库 > 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) 取列表下标

  8.其他常用操作
  list.index(obj)  从列表中找出某个值第一个匹配项的索引位置
  list.insert(index,obj) 将对象插入列表
  list.reverse() 反转列表
  list.count(obj) 统计某个元素在列表中出现的次数
  len(list) 列表长度
 
二.字典(dict)

  字典是另一种可变容器模型,且可存储任意类型对象。

  字典的每个键值(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