Python

我很无耻的又不更新C++了,因为近期有一个小项目有关Python,所以买了Python的书现在在网上学习Python。等这个项目结束后再来C++。

在线参考学习资料:http://www.liaoxuefeng.com 网站上的Python教程,很精简。

1.list列表使用[]来创建对象:classmates = ['Jack', 'Tom', 'Linda']。

list的索引,如果要索引最后一个元素就是list[-1],以此类推。list支持插入元素到指定的位置,list.insert(1, 'Jack'),在一号索引位置上添加Jack元素,剩余的后面的索引依次加一。删除list末尾的元素,用pop()方法,list.pop()。删除指定位置的元素则使用pop(i)方法,i是索引位置。如果要替换某个位置的元素,直接给对应的索引位置赋值,list[i]='Jack'。

list也可以是另外一个list以及其他对象,而且list中的对象类型可以不相同。

2.tuple有序的元组使用()创建对象:classmates = ('Jack', 'Tom', 'Linda'),tuple和list的区别就是tuple不可改变,没有增删的方法,只能查找和引用,所以在定义的时候就应该确定它的元素。但是在tuple中定义的list却可以改变,因为tuple中的list对象是这个list对象的一个引用而不是这个对象,所以实际上tuple中的元素也没有改变。

3.dict字典或者说map,使用key-value方式存储。使用{}定义对象:grade = {'Jack':90, 'Tom':95, 'Linda':85} ,通过grade['Jack']索引其,结果是90.判断元素是否在这个字典中: 'Toby' in grade 其结果是false。若要删除一个元素,则使用pop('Jack'),那么Jack就不会出现在这个字典中。

4.set是一组key的集合,但是不存储value,且key不可以重复,要创建一个set要用一个list作为输入的集合:s = set([1,2,3])

重复的key值被自动的消除,通过add(elem)来添加元素,remove(elem)删除袁术。set可以看作是数学上的无需和无重复的元素集合,所以可以对两个set做数学操作,交集并集等操作。 s1 & s2    s1 | s2。

5.切片:取一个list或者tuple的元素使用切片: L[0:3],从0开始不包括3这个索引一共 3-0个元素。。倒数切片:L[-2:]共0-(-2)个元素,从倒数第二个开始到0但不包括0(最后一个元素的后一个)。前十个数,每两个取一个L[0:10:2],所有数,每5个取一个L[::5],那么所有数就是L[:],同样,字符串也可以看作是一个list:'Hello World'[::2]。

6.迭代,可迭代对象无论对象是否有下标都可迭代。。。。。for ... in ... :

7.列表生成器 range(1, 11)同样得到 11-1 = 10个元素 从1到10不包括11.生成一个包含十个数的列表:

1 L = []
2 for i in range(1, 11):
3     L.append(i)
4 print(L)

不过有更加简单的方式生成列表:

L = [x * x  for x in range(1, 11)]

两层循环式:

1 L = [ x + y for x in range(1,11) for y in range(1, 11)]

总之,就是先在列表里面for前面写上规则,然后for .. in .. 这个是循环的式子来按照前面的规则来构造列表。
8.生成器,列表生成式虽然可以按照规则生成列表,但是由于内存空间的限制,如果要生成很大的列表则没有空间,通过一定的规则来边计算边生成列表而不是一开始就将列表生成。生成的方法也很简单,只要把列表生成式的[]改成() 就可以了

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x02A4E558>

通过next方法来访问这个对象的每一个元素,由于它是保存算法而不是真是的元素。由于生成器是一个可迭代对象,那么通过for迭代也可以迭代式的访问

1 g = (x * x for x in range(10))
2 for n in g:
3     print n

9.yield。generator是一种函数返回的对象,这种函数是一种包含yield关键字的函数。保存状态,随取随用,类似动态规划以及备忘查询的算法。yield的作用就是,每次发生next()调用,函数执行完yield语句之后在挂起,这时返回yield的值(你愿意yield啥就yield啥),整个函数状态被保存,等待下一次next()调用;下次next()调用发生时,从yield后的语句开始执行(有yiled也在循环体内,未必一定是顺序的),直到再次遇到yield为止,然后重复删除动作。

这里我没有弄明白yield的作用以及什么事generator,等到书到了详细的看之,此处待日后处理。

 10.map函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每一个元素,并把结果作为新的list返回。

def fun(x):
    return x*x
map(f, [1, 2, 3, 4, 5, 6]

但是我在3.4环境下返回的是一个map对象而不是一个列表。
11.reduce依然传入两个参数,函数和一个序列,但是其效果相当于

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

 

posted @ 2014-11-04 21:58  剑指天涯不可挡  阅读(182)  评论(0编辑  收藏  举报