Python入门小结

网上学习过程中整理的一个小结,非常零散,用来巩固一下记忆,以后的学习过程中再继续整理补充。


#-*-coding:utf-8 -*-,

把文件编码类型改为utf-8,这样代码中就可以有中文了,另外也支持Unicode字符串,使用 u'...'


Python内置的数据类型:list

list是一种有序集合,可以随时添加和删除其中的元素。

创建list: L=[  ]

可以按照索引访问list: L[0]  

倒序访问:L[-1]   //注意用索引访问不要越界!

添加新元素:

L.append()   //将一个元素追加到list末尾

L.insert()     //接受两个参数,第一个为索引号,第二个为待添加的新元素

删除元素:

L.pop()     //参数为空时,删除最后一个元素;或者按照索引号删除。删除元素会引起元素索引号的变化。


tuple是另一种有序的列表,和list类似,但是创建之后就不可以修改。

t=( )

使用索引访问tuple: t=[0]

创建单元素tuple时要多加一个逗号,例如:t=(1,)

创建可变的tuple:t=(1,2,[1,2])   //在tuple中插入一个list元素


Python中的Dict:

dict可以表示键-值对,由于dict也是集合,len()方法可以计算任意集合的大小。

创建dict:d={

        'a': 10,

        'b': 20

}   //一个key-value 算一个,所以d的大小为2

访问dict:

可以使用d[key],来访问key对应的value,如果key不存在会报错KeyError

可以使用d.get(key)方法,当key不存在时,返回一个None

dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。

不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。

由于dict是按 key 查找,所以,在一个dict中,key不能重复

dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:

d = {
    'Adam': 95,
    'Lisa': 85,
    'Bart': 59
}

当我们试图打印这个dict时:

>>> print d
{'Lisa': 85, 'Adam': 95, 'Bart': 59}

打印的顺序不一定是我们创建时的顺序,而且,不同的机器打印的顺序都可能不同,这说明dict内部是无序的,不能用dict存储有序的集合。

dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。

不可变这个限制仅作用于key,value是否可变无所谓:

{
    '123': [1, 2, 3],  # key 是 str,value是list
    123: '123',  # key 是 int,value 是 str
    ('a', 'b'): True  # key 是 tuple,并且tuple的每个元素都是不可变对象,value是 boolean
}

最常用的key还是字符串,因为用起来最方便。

更新dict:用赋值语句 d[key]=value ,如果key已经存在,value会覆盖原值。

d.value()    //把一个dict转换成一个包含value的list,这样就可以用for循环直接迭代value

d.items()   //这个方法把dict转换成包含tuple的list,这样就可以同时迭代key和value


Python中的set:

set有一系列的元素,无序,并且不重复,这点和dict中的key很像。

创建set的方法是调用set()并传入一个list,list中的元素会作为set的元素。

s=set([1,2,3])

set的特点:

set的内部结构和dict很像,但没有value值,查找一个值是否在set中很快,set中的元素必须是不变元素,set储存的元素没有顺序。

更新set:

s.add()     //添加元素

s.remove()     //删除元素,如果删除的元素不在set中会报错 所以用add可以直接添加,而使用remove前需要判断。


Python中的函数可以返回多值: return x1,x2  实际上,返回值是一个tuple。

如果想让函数能接受任意个参数,可以定义一个可变参数:def f(*args)   //可变参数的名字前有个 * 


Python中对list进行切片:L[0:10]   //表示从索引0开始,到索引10为止,但不包括索引10

L[:3]   //如果第一个索引是0,还可以省略

L[:]    //只用一个:表示从头到尾

L[::2]  //切片中的第三个参数表示每N个取一个

可以倒序切片。

把list变成tuple,切片操作完全相同,只是切片的结果变成了tuple。

字符串'...'和Unicode字符串u'...'也可以看成一种list,也可以切片,操作结果仍为字符串。


在Python中,如果给定一个listtuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。

在Python中,迭代是通过 for ... in 来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的,比如Java代码:

for (i=0; i<list.length; i++) {
    n = list[i];
}

可以看出,Python的for循环抽象程度要高于Java的for循环。

因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。

因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。

注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict

而迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。

迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。

在Python中,迭代永远是取出元素本身,而非元素的索引。对于有序集合,元素是有索引的,有的时候,想在for循环中拿到索引,可以使用enumerate()函数

方法是使用 enumerate() 函数

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
... 
0 - Adam
1 - Lisa
2 - Bart
3 - Paul

使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:

['Adam', 'Lisa', 'Bart', 'Paul']

变成了类似:

[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]

因此,迭代的每一个元素实际上是一个tuple:

for t in enumerate(L):
    index = t[0]
    name = t[1]
    print index, '-', name

如果我们知道每个tuple元素都包含两个元素,for循环又可以进一步简写为:

for index, name in enumerate(L):
    print index, '-', name

这样不但代码更简单,而且还少了两条赋值语句。

可见,索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。


zip()函数可以把两个list变成一个list:

>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]


Python生成列表:

要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):

>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
... 
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。

写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把list创建出来。

for循环后面还可以加上if判断,判断为True的时候,才把循环的当前元素加入到列表中。

for循环也可以嵌套。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值