python笔记(1)

python学习笔记

enumerate 函数用于遍历序列中的元素以及它们的下标:

1
2
for i,j in enumerate(('a','b','c')):
print i,j

0 a
1 b
2 c

1
2
for i,j in enumerate([1,2,3]):
print i,j

0 1
1 2
2 3

1
2
for i,j in enumerate({'a':1,'b':2}):
print i,j

0 a
1 b

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for i,j in enumerate('abc'):
print i,j
```
0 a
1 b
2 c

### Python isalnum()方法检测字符串是否由字母和数字组成
str.isa1num()
如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False

以下实例展示了isalnum()方法的实例:

```python
str = "this2009"; # No space in this string
print str.isalnum();

str = "this is string example....wow!!!";
print str.isalnum();

以上实例输出结果如下:
True
False

Python 字典(Dictionary) setdefault()方法和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。

dict.setdefault(key, default=None)
1
2
3
4
dict = {'Name': 'Zara', 'Age': 7}

print "Value : %s" % dict.setdefault('Age', None)
print "Value : %s" % dict.setdefault('Sex', None)

以上实例输出结果为:
Value : 7
Value : None

python 字典访问的三种方法

定义字典 dic = {‘a’:”hello”,’b’:”how”,’c’:”you”}

  • 方法一:
1
2
3
for key in dic:
  print key,dic[key]
  print key + str(dic[key])

结果:

  a hello
  ahello
  c you
  cyou
  b how
  bhow

细节:

print key,dic[key],后面有个逗号,自动生成一个空格

print key + str(dic[key]),连接两个字符串,用的是加号,直接输出,中间不加逗号

  • 方法二:
1
2
for (k,v) in dic.items():
  print "dic[%s]="%k,v

结果:

  dic[a]= hello
  dic[c]= you
  dic[b]= how

  • 方法三:
1
2
for k,v in dic.iteritems():
  print "dic[%s]="%k,v

结果:

  dic[a]= hello
  dic[c]= you
  dic[b]= how

  • 对比:

items()返回的是列表对象,而iteritems()返回的是iterator对象。例如:

print dic.items() #[(‘a’, ‘hello’), (‘c’, ‘you’), (‘b’, ‘how’)]

print dic.iteritems() #

深究:iteritor是迭代器的意思,一次反回一个数据项,直到没有为止

1
2
for i in dic.iteritems():
   print i

结果:(‘a’, ‘hello’)
(‘c’, ‘you’)
(‘b’, ‘how’)

Python特殊语法:filter、map、reduce、lambda

Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力!

filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回:

def f(x): return x % 2 != 0 and x % 3 != 0 
filter(f, range(2, 25)) 

[5, 7, 11, 13, 17, 19, 23]

def f(x): return x != 'a' 
filter(f, "abcdef") 

‘bcdef’

map(function, sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回:

def cube(x): return x*x*x 
map(cube, range(1, 11)) 

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

def cube(x) : return x + x 
map(cube , "abcde") 

[‘aa’, ‘bb’, ‘cc’, ‘dd’, ‘ee’]

另外map也支持多个sequence,这就要求function也支持相应数量的参数输入:

def add(x, y): return x+y 
map(add, range(8), range(8)) 

[0, 2, 4, 6, 8, 10, 12, 14]

reduce(function, sequence, starting_value):对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和:

def add(x,y): return x + y 
reduce(add, range(1, 11)) 

55 (注:1+2+3+4+5+6+7+8+9+10)

reduce(add, range(1, 11), 20) 

75 (注:1+2+3+4+5+6+7+8+9+10+20)

lambda:这是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,这些叫做lambda的函数,是从LISP借用来的,可以用在任何需要函数的地方:

g = lambda x: x * 2 
g(3) 

6

(lambda x: x * 2)(3) 

6

我们也可以把filter map reduce 和lambda结合起来用,函数就可以简单的写成一行。
例如

kmpathes = filter(lambda kmpath: kmpath, 
map(lambda kmpath: string.strip(kmpath),
string.split(l, ':'))) 

看起来麻烦,其实就像用语言来描述问题一样,非常优雅。
对 l 中的所有元素以’:’做分割,得出一个列表。对这个列表的每一个元素做字符串strip,形成一个列表。对这个列表的每一个元素做直接返回操作(这个地方可以加上过滤条件限制),最终获得一个字符串被’:’分割的列表,列表中的每一个字符串都做了strip,并可以对特殊字符串过滤。