-
迭代永远是取出元素本身,而非元素的索引。想在 for 循环中拿到索引,怎么办?
索引迭代使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name,自动把每个元素变成 (index, element) 这样的tuple,再迭代
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> for index, name in enumerate(L): ... print index, '-', name
zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C']) [(10, 'A'), (20, 'B'), (30, 'C')]
在迭代 ['Adam', 'Lisa', 'Bart', 'Paul'] 时,如果我们想打印出名次 - 名字(名次从1开始)
L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in zip(range(1, len(L)+1), L): print index, '-', name
查看全部 -
迭代操作就是对于一个集合,无论该集合是有序还是无序,用 for 循环总是可以依次取出集合的每一个元素。
集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict用range(1, 101)可以创建数组
用for循环迭代数列 1-100 并打印出7的倍数
for i in range(1, 101): if i % 7 == 0: print i
查看全部 -
字符串也可以用切片操作,只是操作结果仍是字符串
>>> 'ABCDEFG'[:3] 'ABC' >>> 'ABCDEFG'[-3:] 'EFG' >>> 'ABCDEFG'[::2] 'ACEG'
>>> 'abc'.upper() 'ABC'
返回一个仅首字母变成大写的字符串
def firstCharUpper(s): return s[0].upper() + s[1:]
查看全部 -
倒序切片,倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
查看全部 -
对list进行切片
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。L[:]只用一个 : ,表示从头到尾。L[::2]第三个参数表示每N个取一个,以上会每两个元素取出一个来。
把list换成tuple,切片操作完全相同。
查看全部 -
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数.比如:
def fn(*args): print args
查看全部 -
>>> int('123', 8) 83
int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数.
函数的默认参数的作用是简化调用,函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面
def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s
>>> power(5) 25
查看全部 -
如果一个函数在内部调用自身本身,这个函数就是递归函数.计算阶乘 n! = 1 * 2 * 3 * ... * n:
fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。
def fact(n): if n==1: return 1 return n * fact(n - 1)
所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰.
汉诺塔的移动也可以看做是递归函数。
对柱子编号为a, b, c,a有N个圆盘,将所有圆盘从a移到c可以描述为:
def move(n, a, b, c): if n ==1: print a, '-->', c return move(n-1, a, c, b) print a, '-->', c move(n-1, b, a, c)
查看全部 -
# math包提供了sin()和 cos()函数,我们先用import引用它:
import math def move(x, y, step, angle): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny
>>> x, y = move(100, 100, 60, math.pi / 6) >>> print x, y 151.961524227 70.0
Python函数返回的仍然是单一值,原来返回值是一个tuple.
math包提供了sqrt()函数用于计算平方根
查看全部 -
定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回.
以自定义一个求绝对值的 my_abs 函数为例:
def my_abs(x): if x >= 0: return x else: return -x
函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑.
查看全部 -
需要知道函数的名称和参数
abs (x) # 绝对值
cmp(x, y) # 如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1
int() # 把其他数据类型转换为整数
str() # 把其他类型转换成 str
计算 1*1 + 2*2 + 3*3 + ... + 100*100
L = [] x = 1 while x <= 100: L.append(x * x) x = x + 1 print sum(L)
查看全部 -
函数调用直接在更高的层次上思考问题。
查看全部 -
set存储的是一组不重复的无序元素
更新set:
>>> s = set([1, 2, 3]) >>> s.add(4) >>> print s set([1, 2, 3, 4])
>>> s = set([1, 2, 3, 4]) >>> s.remove(4) >>> print s set([1, 2, 3])
用add()可以直接添加,而remove()前需要判断
查看全部 -
>>> s = set(['Adam', 'Lisa', 'Bart']) >>> for name in s: ... print name ... Lisa Adam Bart
s = set([('Adam', 95), ('Lisa', 85), ('Bart', 59)]) for x in s: print x[0],':',x[1]
查看全部 -
set的这些特点,可以应用在哪些地方呢?
如何判断用户的输入是否是一个有效的星期呢?
weekdays = set(['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']) x = '???' # 用户输入的字符串 if x in weekdays: print 'input ok' else: print 'input error'
查看全部
举报