python 入门篇之疑难点一
1、list:列表。关于列表主要有创建、访问、添加、删除和替换几方面来看。
创建:L=[1,2,3,4,5]
访问:分按照索引访问和倒序访问。前者:L[0]=1,L[4]=5;后者:L[-1]=5,L[-5]=1
添加:
1,直接在最后添加:L.append()
例如:L.append(6)则L=[1,2,3,4,5,6]
2. L.insert()这个需要输入两个参数(前面参数是索引号,后面是新元素),例如L.insert(0,8)则L=[8,1,2,3,4,5]
3,删除:
L.pop(),这个是删除最后一个元素;如果删除某个位置的元素,只需要在()中输入索引号即可。如:L.pop(0)则L=[2,3,4,5]
4,替换:
想替换哪个位置的元素,只需要L[xx]其中xx就是替换的元素的索引号。例如:
L[1]='Adam'则L=[1,'Adam',3,4,5]
2、tuple:元组。创建tuple例如:t=(1,2,3)
注意:单元素的tuple必须要在元素后面添加“,”,例如:t=(1,)
查看tuple只需要t[xx]其中xx表示元素的索引号。
tuple是不可变的,一旦创建便不可修改。
3、dict:字典。关于dict主要有创建、访问、添加和遍历几方面来看。
创建:dict={'A':1,'B':2,'C':3}前面的为Key后面的问Value,dict就是有Key:Value组合成的。可以通过Key来查找Value。
访问:d[key]访问时必须保证key是在dict中的。例如:print d['A']=1;key在不在dict中需要判断(一般都使用dict提供的get方法即可),例如:print d.get('A')返回1;如果输入的key不存在dict中,那么print d['p']返回的是None。
注意:dict的特点:无序,key必须是不可变。
更新(添加):直接用赋值语句即可。例如:d['M']=4则print d返回的可能是{''C':3,'M':4,A':1,'B':2}因为dict是无序的,所以返回的顺序也是不确定的。
遍历:dict={'A':1,'B':2,'C':3使用for即可
for key in d:
print key
则返回的是对应的key值:
A
B
C
4、set:如果只需要dict中的key,可以使用set。
创建:
s=set{['A','B','C']}
注意:set也是无序的,而且set不能包含重复的元素。
访问:
直接使用in来判断元素是否在set中即可。
遍历:使用for key in s:
更新:添加元素使用s.add()例如:s.add('D')
删除元素使用s.remove('A')。
注意:删除需要先判断元素是否在set中,否则会报错。
5、函数:包括调用、编写函数。
调用:python内置很多函数,可以直接调用。可以直接从Python的官方网站查看文档:http://docs.python.org/2/library/functions.html了解更多内置函数。
编写:使用def例如:
def my_abs(x):
if x >= 0:
return x
else:
return -x
(格式:def 函数名 ():)
注意:1,定义默认参数,默认参数只能定义在必需参数的后面。
例如:(world就是默认参数,当没有参数输入时,直接返回:Hello,world.;当有参数输入时,返回Hello,Bart.)
def greet(name='world'):
print 'Hello,'+name+'.'
greet()
greet('Bart')
2.定义可变参数:函数参数都是用*args表示。例如:
def average(*args):
sum = 0.0
if len(args) == 0:
return sum
for x in args:
sum = sum + x
return sum / len(args)
print average()
print average(1, 2)
print average(1, 2, 2, 3, 4)
6、切片:对list进行切片其实就是取一个list的部分元素。切片格式一般如下:
L[0:3]表示取L的前三个元素,不包括L[3];也可简写为L[:3].
L[:]表示从头取到尾,实际就是复制了一个L
如果想要每隔两个元素取一次,则可以在第三个位置添加间隔数,例如:
L[0:10:2]
例如:
L = range(1, 101)
print L[0:10]
print L[2::3]
print L[4:50:5]
其实就是:利用切片,分别取出L中
1. 前10个数;2. 3的倍数;3. 不大于50的5的倍数。
上面的切片方法对于tuple、字符串等同样适用。
倒序切片就是从后往前进行切片。例如:
L = range(1, 101)
print L[-10:]
print L[-46::5]
其实就是利用倒序切片对 1 - 100 的数列取出:
* 最后10个数;
* 最后10个5的倍数。
7、迭代:利用for循环遍历list或者tuple等任何可迭代的对象的过程就是迭代。
索引迭代:迭代永远是取出元素本身,而非元素的索引。那么,可以使用enumerate()函数来同时得到索引和元素。
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L):
print index, '-', name
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
实际上,enumerate() 函数把:L=['Adam', 'Lisa', 'Bart', 'Paul']变成了:
L=[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
迭代dict的value:有两个方法values()和itervalues()。关于两者的区别如下:
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
例如:对于values()方法
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.values()
for v in d.values():
print v
返回的是:
85
95
59
对于intervalues()方法
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.itervalues()
for v in d.itervalues():
print v
返回的是:
<dictionary-valueiterator object at 0x106adbb50>(注释:打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象)
85
95
59
迭代dict的key和value:如果想同时迭代 key和value,可以使用items()方法。
例如:
请根据dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
打印出 name : score,最后再打印出平均分 average : score。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
sum = 0.0
for k, v in d.items():
sum = sum + v
print k,':',v
print 'average', ':', sum/len(d)
注意:和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
8、列表生成式:
列表生成式可以用一行语句代替通过繁琐的循环方式生成list:
[x * x for x in range(1, 11)][1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。
9、复杂表达式:
使用for循环的迭代不仅可以迭代普通的list,还可以迭代dict。
假设有如下的dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
注:字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。
把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了:
<table border="1">
<tr><th>Name</th><th>Score</th></tr>
<tr><td>Lisa</td><td>85</td></tr>
<tr><td>Adam</td><td>95</td></tr>
<tr><td>Bart</td><td>59</td></tr>
</table>

10、条件过滤:列表生成式的 for 循环后面还可以加上 if 判断。通过判断来进行筛选。例如:
如果我们只想要1-10之间偶数的平方,可以加上 if 来筛选:
[x * x for x in range(1, 11) if x % 2 == 0]
返回的是:
[4, 16, 36, 64, 100]
11、多层表达式:
for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。
对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:
[m + n for m in 'ABC' for n in '123']
返回的是:
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']