python学习笔记(二)

python学习

List和Tuple类型

创建List

python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,用list表示:[‘Michael’,’Bob’,’Tracy’]
list是数学意义上的有序集合,也就是说,list中的元素都是按照顺序排列的。可以把list赋值给一个变量,就可以通过变量来引用list。
由于python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据类型。

L=['echo',100,True]
print L

也可以有空list。

list操作

有正序访问还有倒序访问,跟数组元素的访问方式一样

添加新元素,用append()方法,append()方法添加新元素市中市添加到list尾部。

L=['echo','Anna','Day']
L.append('Emma')
   #L=['echo','Anna','Day','Emma']

从list删除元素:用list的pop()方法,该方法不添加参数时总是删除list最后一个元素。当然也可以pop(2),pop(3),删除指定索引的元素

L=['echo','Anna','Day','Emma']
L.pop()     #L=['echo','Anna','Day']
L.pop(1)    #L=['echo','Day']

还可以给替换list中的元素,直接给list的中的元素重新赋值就行

Tuple

创建Tuple:tuple是一种有序的列表。中文翻译为”元组”。tuple一旦创建完毕,就不能修改了。
创建tuple和创建list唯一不同之处是用()替代[],并且tuple没有appen(),insert(),pop()方法

创建单元素tuple,比如:t=(‘a’,’b’,’c’)
“可变”的tuple:t=(‘a’,’b’,[‘A’,’B’]) (tuple中可以包含list)

条件判断和循环

if 语句

python代码的缩进规则:python的习惯写法:缩进时4个空格,不要使用Tab,更不要混合Tab和空格。
如果在python交互环境下敲代码,还要特别留意代码缩进,并退出缩进需要多敲一行回车。
if-elif-else,其中elif就是 else if

for循环

list或tuple可以表示一个有序集合,如果想依次访问一个list中的每一个元素,python的for循环就可以依次把list或tuple的每个元素迭代出来:

L=['echo','Anna','Day']
for name in L:
    print name

pay attention to :name 这个变量是在for循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给name,然后执行for循环(就是缩进的代码块)

while循环

N=10
x=0
while x<N:
    print x
    x=x+1

python同样也有break退出循环,continue继续循环

Dict和Set类型

dict

python中的dict其实就是键值对(key-value)表,dict有个len()函数可以计算任意集合的大小。

d={
     'echo':95,
     'Lisa':85,
     'Anna':59
     }

访问dict:可以简单地使用d[key]的形式查找对应的value,但如果key不在dict对象中,访问的话就会发生KeyError,要避免KeyError,有两个办法:

  • 先判断key是否存在,用in操作符:
if 'echo' in d:
    print d['echo']
  • 使用dict本身提供的一个get方法,在key不存在的情况下,返回None:
print d.get('echo')   #95
print d,get('hello')    #None

dic的特点:

  1. 查找速度快:无论dict有10个元素还是10万个元素,查找速度都一样;而list的查找速度随着元素增加而逐渐下降。
  2. dict第二个特点是存储的key-value序对是没有顺序的(内部无序)。
  3. 作为key的元素必须不可变

dict的缺点:占用内存过大,还会浪费很多内容,list正相反,占用内存小,但是查找速度慢。

更新dict,如d[‘echo’]=76.
如果key已经存在,会用新的value代替原来的value

什么是set

dict的作用是建立一组key和一组value的映射关心,dict的key是不能重复的。
而set持有一系列元素,这一点和list很像,但是set的元素没有重股份,而且无序。
创建set的方式是调用set()函数并传入一个list,list的元素将作为set的元素:

s=set(['A','B','C'])

set不能包含重复元素,如果传入包含重复元素的list,set会自动去掉重复的元素。

访问set:由于set存储的是无序集合,所以没法通过索引来访问,访问set中的某个元素实际上就是判断一个元素是否在set中

s=set(['echo','Anna','Day'])
'Anna' in s   #Ture

set的特点:

  • set的内部结构和dict很像,唯一区别是不存储value,因此判断一个元素是否在set中速度很快
  • set存储的元素和dict的key类似,必须是不变的对象,因此,可变对象是不能放入set中的
  • 最后,set存储的元素也是没有顺序的

遍历set:可通过循环实现

更新set:由于set存储的是一组无序的元素,一次更新set主要做两件事,一是把新的元素添加到set中,二是把已有元素从set中删除。

添加元素时,用set的add()方法,如果添加的元素已经存在于set中,add()不会报错,但是不会把元素添加进去。

删除set中的元素,用set的remove()方法,如果删除的元素不再set中,remove()会报错。

所以,add()方法可以直接添加,而remove()前需要判断

函数

什么是函数:借助抽象,才能不关心底层的具体计算过程,而直接在更高层次上思考问题。写计算机程序也一样,函数就是最基本的一种代码抽象的方式。python不但能非常灵活的定义函数,而且本身内置了很多函数,只需要知道函数的名称和参数。

详情参考python官方网站:https://docs.python.org/2/library/index.html

编写函数:在python中,定义一个函数要用def语句,依次写出函数名、括号、括号中的参数和冒号;然后,在缩进块中编写函数体,函数的返回值用return语句返回,例如:

def my_abs(x):
    if x>=0:
        return x
    else 
        return -x

如果没有return语句,函数执行完毕后也会返回结果,只是结果为None

python中定义的函数可以返回多值,比如:

import math
def move(x,y,step,angle):
    nx=x+step*matn.cos(angle)
    ny=y+step*math.sin(angle)
    return nx,ny

这样就可以同时获得返回值:

>>>x,y=move(100,100,60,math.pi/6)
>>>print x,y

用print打印返回结果,会发现返回值是一个tuple

递归函数

递归函数,比如:

def fact(n):
    if n==1:
        return 1
    return n*fact(n-1)

pay attention to:使用递归函数要防止栈溢出
在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧,由于栈帧的大小不是无限的,所以递归调用的次数过多,就会导致栈溢出。

用递归函数实现汉诺塔:

def move(n,a,b,c):
    if  n==1:
        print a,'-->',c
        return
    move(n-1,a,b,c)
    move(1,a,b,c)
    move(n-1,b,a,c)

调用这个函数

>>>move(4,'A','B','C')

定义默认参数

函数的默认参数是简化调用,比如:

def power(x,n):
    s=1
    while n>0:
        n=n-1
        s=s*x
    return s

假设计算平方的次数最多,就可以吧n的默认值设定为2:

def power(x,n=2):
    s=1
    while n>0:
        n=n-1
        s=s*x
    return s

这样一来就不需要传入两个参数了,但默认参数只能定义在必需参数的后面。

定义可变参数

如果下个让一个函数接受任意个参数,就可以定义一个可变参数

def fn(*args):
    print args

可变参数的名字前面有个*号,我们可以传入0个,1个或多个参数给可变参数:其实,python解释器会把传入的一组参数组装成一个tuple传递给可可变参数,因此,在函数内部直接把变量args看成一个tuple就好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值