python - Learning Python

python的dict,set,list,tuple应用

字典(dict)
dict 用 {} 包围
dict.keys(),dict.values(),dict.items()
hash(obj)返回obj的哈希值,如果返回表示可以作为dict的key
del 或 dict.pop可以删除一个item,  clear清除所有的内容
sorted(dict)可以吧dict排序
dict.get()可以查找没存在的key, dict.[]不可以
dict.setdefault() 检查字典中是否含有某键。 如果字典中这个键存在,你可以取到它的值。 如果所找的键在字典中不存在,你可以给这个键赋默认值并返回此值。
{}.fromkeys()创建一个dict,例如: {}.fromkeys((’love’, ‘honor’), True) =>{’love’: True, ‘honor’: True}
不允许一个键对应多个值
键值必须是哈希的,用hash()测试
一个对象,如果实现_hash()_方法可以作为键值使用

 

集合(set)
集合是一个数学概念,用set()创建
set.add(),set.update.set.remove,添加更新删除,-= 可以做set减法
set.discard 和 set.remove不同在于如果删除的元素不在集合内,discard不报错,remove 报错
< <= 表示 子集,> >=表示超集
| 表示联合 & 表示交集 – 表示差集 ^ 差分集

 

列表(list)
列表是序列对象,可包含任意的Python数据信息,如字符串、数字、列表、元组等。列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加、修改、删除等操作。可以通过list(seq)函数把一个序列类型转换成一个列表。
append(x) 在列表尾部追加单个对象x。使用多个参数会引起异常。
count(x) 返回对象x在列表中出现的次数。
extend(L) 将列表L中的表项添加到列表中。返回None。
Index(x) 返回列表中匹配对象x的第一个列表项的索引。无匹配元素时产生异常。
insert(i,x) 在索引为i的元素前插入对象x。如list.insert(0,x)在第一项前插入对象。返回None。
pop(x) 删除列表中索引为x的表项,并返回该表项的值。若未指定索引,pop返回列表最后一项。
remove(x) 删除列表中匹配对象x的第一个元素。匹配元素时产生异常。返回None。
reverse() 颠倒列表元素的顺序。
sort() 对列表排序,返回none。bisect模块可用于排序列表项的添加和删除。

 

元组(tuple)
tuple=(1,),这是单个元素的元组表示,需加额外的逗号。
tuple=1,2,3,4,这也可以是一个元组,在不使用圆括号而不会导致混淆时,Python允许不使用圆括号的元组。
和列表一样,可对元组进行索引、分片、连接和重复。也可用len()求元组长度。
元组的索引用tuple[i]的形式,而不是tuple(i)。
和列表类似,使用tuple(seq)可把其它序列类型转换成元组。

 

转: http://blog.andsky.com/2009/12/03/python的dictsetlisttuple应用/

My Python Quiz

昨天没更新,罪过罪过....

还是有点特殊原因的

刚把<Python Tutorial>看完了,应该是扫完了....

在douban上看到这么一个网站 挺有意思的

http://www.mypythonquiz.com/

都是些非常入门级的测试题.做了几道,还在做来着

有这么两道题:

what gets printed? Assuming python version 2.x  

what gets printed? Assuming python version 3.x

 

第一个答案<type 'int'>, 我还特意运行来着.....

第二个答案<type 'float'>,  居然猜对了

 

这文好水,  重点是这个网站 ==.

Data Structures --Python

Python貌似有很多内置的数据类型

看的几本书都不完全一样,但也差不多

  • numbers                数值
  • strings                   字符串
  • lists                       列表
  • tuples                    元组
  • dictionaries            字典

看的有点混乱

不过基本都有详细讲 lists,tuples,dictionaries三种

lists:

>>>a=[3.31,534,[54,'cat']'eggs']
>>>a
a=[3.31,534,[54,'cat']'eggs']

 

tuples:

>>>b=56,4.43,'dog'
>>>b
(56,4,43,'dog')

 

dictionaries:

>>>dict={'jack':342,'sape':'ax'}
{'jack':342,'sape':'ax'}

 

imutable basic types      不可变基本类型

           numbers,strings,tuples  (数值,字符串,元组)

mutable basic types

           lists,dictionaries,and most other types   (字典,链表和其它的)

 

还有好多详细的记不太清了,赶紧复习一下...

Coding Style

4.8. Intermezzo: Coding Style

  • Use 4-space indentation,and no tabs.  

使用四格缩进,而非Tab.               //我一直都是用的Tab.... 在.vimrc里设置的 set tabstop=4  应该也是四格缩进吧

  • Wrap lines so that they don't exceed 79 characters.

折行以确保其不会超过79个字符.                   //  过长的话直接来个 \  好了

  • Use blank lines to separate functions and classes, and larger blocks of code inside functions.

使用空行分隔函数和类,以及函数中的大块代码.                 //每一函数或类之后总是习惯性的回车几下看来是个好习惯

  • When possible, put comments on a line of their own.

肯能的话,让注释独占一行.               //想这样只有几个字的"注释"就没必要换行了吧,多浪费...

  • Use docstrings.

使用文档字符串

  • Use spaces around operators and after commas, but not directly inside bracketing constructs: a = f(1, 2) + g(3, 4).

在操作符和逗号两边放空格,但括号里不加            //每次都忘记空格..

  • Name your classes and functions consistently; the convention is to use CamelCase for classes and lower_case_with_underscores for functions and methods. Always use self as the name for the first method argument

统一函数和类名,合适的用法是 类为 CamelCase 骆驼式命名,函数和方法为  lower_case_with_underscires 小写加下划线式命名.总是把  self  作为方法的第一个参数                 //骆驼式命名.....下次注意

  • Don’t use fancy encodings if your code is meant to be used in international environments. Plain ASCII works best in any case.

在国际化环境中不要用自己喜欢的编码,纯ASCII总是工作最好的.                  //貌似UTF-8 更好....

 

每个人都会有自己的Coding Style,虽然我没写过几行代码,自然也有,只是我还没发现哈~

Fibonacci - Python

<Python Tutorial>

3.2. First Steps Towards Programming 里 介绍的是 an initial sub-sequence of the Fibonacci series 

 

>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while b < 10:
...     print b
...     a, b = b, a+b
...
1
1
2
3
5
8

 

然后在网上扫了下,经过自己的整理弄出下面的代码

 

#!/usr/bin/python
# -*- coding:UTF-8 -*-


#循环算法
def loop(n):
	""" a genertor fo Fibonacci numbers,goes to nex tnumber in series on each call"""

	a,b =0,1
	while a<= 1000:
		print a,
		a,b = b, a+b

#递归算法   
def recursion(n):  
	""" use recursion to get Fibonacci numbers,returns the Fibonacci value for n
		not very efficient because of the many function calls	"""

	if n<2:  
		return n  
	else:  
		return recursion(n-1)+recursion(n-2)  

if __name__=="__main__":
	print "迭代法"
	loop(14)
	print "\n"+'-'*50

	print "递归算法"
	for i in range(17):
		print recursion(i),

用了两种方法,第一个很快,几秒钟就出来了.

用递归的就很慢,特别是n变的很大时,甚至会弄的死机.....你测试一下就知道了~~~~~

 

#!/usr/bin/python
# -*- coding:UTF-8 -*-

#递归算法测试  
def recursion(n):  
	if n<2:  
		return n  
	else:  
		return recursion(n-1)+recursion(n-2)  

for n in range(36):
	print "recursion(%d)=%d"%(n,recursion(n))

print
print "Calculating...."
print

print "recursion(%d)=%d"%(56,recursion(56))

Python入门书籍

我第一本看的是

<A byte of Python>  中文版的翻译为<简明Python教程>

这一本非常简单,不到半天就看玩了,适合初步的了解

 

然后开始看  <Dive into Python>

第二章的第一个Python程序就给了个看不大懂的程序,   然后硬着头皮往下看,整个章节完之后再会过头来,完全被这个 程序给折服了,太Cool了!   激发了我看下去的动力.   到第 4,5章 却是完完全全的折磨啊~~~  是我水平不够把,几乎没什么其他编程基础,还来看这么高深的书, 我记得这是别人推荐的入门书啊

去豆瓣瞄瞄,既而看到这篇博文 为什么<Dive into Python>不值得推荐  ,

然后在考虑到自身的水平,还是过一段时间再来看这本吧.....

 

O'Reilly 出版的  <Learning Python>  貌似也不错,貌似讲的太过详细罗嗦了点, 国外的书都是比较详细考究的吧,没开始看

 

现在正看的是官方的<Python Tutorial>  毕竟是开发Python的人写的,顺便也练练英语