在python当中一切皆对象,我们可以先创建一个对象,并给对象一定的值,这叫做实例化,然后再把此对象可以被其他对象所引用,

一:列表操作如下:

list1 = [1,2,"a","b",[5,6,7]] 
list2 = list1

id(list1)  #比较两个对象的值在内存的id是否一致
140698570735696

id(list2)
140698570735696

判断两个列表是否相等,注:此处的判断是判断两个列表的值是否相等。

list1 == list2
True

将list1进行修改,然后检查list2的值是否发生修改:

先通过list1的最后一个下标获取其值:

list1[4]  #获取下标的值
[5, 6, 7]

list1[4] = [55,66]  #对下标重新赋值

list1
[1, 2, 'a', 'b', [55, 66]]  #检查list1和list2的值是否一致

list2
[1, 2, 'a', 'b', [55, 66]]

list1 == list2  #再次验证是否一致
True


二:字典下标操作:

通过下标获取value并进行修改:

dic1 = {1:2,"a":"b"}
dic1.setdefault(901,[55]) #setdefault,当有此字典的时候不做任何设置,无此字典则进行添加
[55]  #是setdefault的返回值

dic1.fromkeys(range(5),[]) #fromkeys为指定key,并未key指定value从而生成新的字典。
{0: [], 1: [], 2: [], 3: [], 4: []}

c = dic1.fromkeys(range(5),[]) #c实例化dic1方法生成的结果
c[1].append({"B":{}}) #c字典进行修改

c[1][0]["B"]["C"] = "END" #获取到c的下标进行修改

print c #显示c的最最终内容
{0: [{'B': {'C': 'END'}}], 1: [{'B': {'C': 'END'}}], 2: [{'B': {'C': 'END'}}], 3: [{'B': {'C': 'END'}}], 4: [{'B': {'C': 'END'}}]}

print dic1
{'a': 'b', 1: 2, 901: [55], 902: 'x'}

字典引用:

dic1 = {"k1":"v1","k2":"v2"}  #创建一个字典,实例化的步骤

id(dic1) #查看字典在内存的id
140502614443464

dic2 = dic1  #对dic1进行引用

id(dic2)
140502614443464


dic1["k2"] = "v22"  #通过字典的key修改其相对应的value,这样是在字典原基础上修改,这样不会影响内存id,如果直接改字典是新建一个新的字典并复制给当前字典,内存id会变化
dic1
{'k1': 'v1', 'k2': 'v22'}

dic2    #查看dic1和dic2,发现dic1修改dic2同样进行了修改
{'k1': 'v1', 'k2': 'v22'}

id(dic1)  #
140502614443464

id(dic2)  #再次检查dic1和dic2的内存id并没有变化,因此通过字典的key修改不会影响字典引用和内存id的值
140502614443464

dic1 == dic2  #对比两个字典是否一致
True

字典key和value的循环方法:

对于key和value不是很多的字典,因为本操作会将所要字典全部读取出来并加载到内存最后执行for循环进行遍历找出key和value,速度会慢而且站资源,因此小的字典可以使用简单的for循环,如下:
for k,v in dic1.items():
     print k,"--->",v
执行结果如下:
k2 ---> v22
k1 ---> v1

对于字典比较大的操作,比如几十万上百万行,使用如下方法:
for k in dic1:
    print k,"--->",dic1[k]
执行结果如下:
k2 ---> v22
k1 ---> v1

列表循环举例:

通过循环某个列表,将匹配条件的结果附加到另一个列表或字典:

#生成偶数字典
list1 = range(0,50,2) #使用range生成序列

#生成一个空的字典,有key,但是value空的,稍后引用
dic1 = {"k1":[],"k2":[]}

#一个空的列表
list2 = []

#一个空的列表
list3 = []

#循环原列表
for i in list1:
    if i > 25: #条件1,如果数字大于指定的某个数
        list2.append(i)  #就把此数附加给列表2

    else:
        list3.append(i) #否则就附加给列表3
print list2,list3  #最后输出列表2和列表3的内容

执行结果:
[27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49] [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]


字典循环举例:

list1 = range(1,50,2) #使用range生成序列
dic1 = {"k1":[],"k2":[]}


for i in list1:
    if i > 25:
        dic1["k1"].append(i)

    else:
        dic1["k2"].append(i)
print dic1

执行结果:
{'k2': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25], 'k1': [27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49]}

另外一种循环方法:

list1 = range(1,50,2) #使用range生成数字序列并给list1引用,即通过list1进行实例化
dic1 = {}
for item in list1:
    if  item > 25: #假如数值大于25
        if 'k2' in dic1.keys(): #条件为假如k2是dic1的key
            dic1['k2'].append(item) #就给k2这个key附加一个item的值,for是每次循环一行,一次每行增加一个值

        else:  #假如k2不在item的key里面
            dic1['k2'] = [item,] #就创建一个列表并附加一个value,里面的逗号表示这是一个列表,不加逗号在django的某些时候不能识别,因此加逗号通用
    else:  #假如数值小于25
        if 'k1' in dic1.keys(): #假如k1在item的key里面,即是item的key
            dic1['k1'].append(item)  #给k1附加一个值
        else:  #假如k1不是item的key
            dic1['k1'] = [item,]  #创建一个新的列表并附加一个value
print dic1
执行结果:
{'k2': [27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49], 'k1': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]}

三:文件基础操作:

假如有一个log文件,其每一行记录了一个人名、得分数和排名,内容如下:

jack|98|1
tom|95|2
jhon|93|3

现在有个要求,需要用字典的方式对列表进行拆分,以人名当做key,分数和排名用列表当做value,方法如下:

#/usr/bin/env  python
# -*- coding:utf-8 -*-
obj = file('log','r')  #以只读方式打开日志文件
line_list = obj.readlines()  #将文件一次性全部读取完成
obj.close()  #关闭文件
dic = {}

for line in line_list:  #对列表进行循环

    line = line.strip()  #将循环结果赋值给line调用,列表的strip方法会默认删除列表两头空格和换行符,包括('\n', '\r',  '\t',  ' '),还可以在括号传递要在两头删除的字符,还有rstrip和lstrip方法
    list_line = line.split('|') #split方法用于 通过指定字符对列表进行分片,本次是通过|对列表中出现|的进行分片,分片完成以后生成字符形式的列表,即每个元素用引号引起来,其形式如['a','1'],数字也引起来
    dic[list_line[0]] = list_line[1:] #引用字典,将列表的第一个元素传递给字典当做字典的key,并给key赋值,值为列表第二个(1:表示对列表切片,从二个元素到结尾)元素到最后的所有元素
print dic #打印字典的最终结果

执行结果如下:

{'jhon': ['93', '3'], 'jack': ['98', '1'], 'tom': ['95', '2']}

四:lambda表达式:

lambda表达式的定义:

只是一个表达式,完成一些逻辑简单的表达式,可以用于def函数中

自动return结果

num = lambda x,y,z:x+y+z #定义一个表达式,接收x,y,z三个参数,并计算x+y+z的结果
num(3,4,5) #调用表达式并传递参数
12 #执行结果

def dic(x): #第一步执行函数,第三步x=2
    return  lambda y:x+y #第四步执行lambda表达式,需要传递x的值,第六步x等于2y等于4,返回6即执行完毕
a = dic(2) #第二步传递2给x
print a(4) #第五步打印a并传递4给y

dic2 = lambda a,b:a+b #定义一个表达式接收两个形参,dic2等于定义函数的名称,a,b等于函数名后面的形式参数,a+b等于函数结果的return a+b,lambda是自动return结果给函数名
num = dic2(3,6)  #等于调用函数
print num #输出执行结果