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的人写的,顺便也练练英语