首页 > 代码库 > Python学习(2)

Python学习(2)

  今天主要学习了Python列表的一些操作。具体总结如下:

列表概念有别于元组:列表可修改,元组不能。那为什么还要学习元组呢?因为元组的使用通常是技术性的,它与Python内部运行方式有关。

编写一个列表可以有如下格式:列表中的各个元素通过逗号隔开,写在方括号中。具体:

Edward = [‘Edward Gumby‘, 42]

通用序列操作主要有:索引、分片(slicing)、加、乘。先看索引

>>> greeting = ‘Hello‘
>>> greeting[0]
‘H‘

求最后一个索引值可以使用

>>> greeting[-1]

‘o‘

注:索引0是序列的第一个元素

分片:类似于matlab中的获取矩阵块

>>> tag = ‘<a href= "Http://www.python.org">Python web site</a>‘
>>> tag[9:30]
‘"Http://www.python.or‘
>>> tag[32:-4]
‘>Python web site‘

注:上例中索引30(其实是第31个元素)是取不到的,所取的元素个数为30-9=21个

如果分片所得部分序列结尾的元素,只需要空最后一个索引即可:

如:

>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[-3:]
[8, 9, 10]

同样这种方法适合于序列开始的元素

>>> numbers[:3]
[1, 2, 3]

刚刚所取的步长都是默认值1,能不能取其它步长呢?当然可以,通常有两个冒号,最后一个冒号所对应的数字就是步长。

>>> numbers[0:10:2]
[1, 3, 5, 7, 9]

>>> numbers[1::4]  #从第二个元素开始到结束,步长为4
[2, 6, 10]

>>> numbers[::4]   #从第一个元素开始到结束,步长为4
[1, 5, 9]

步长也可以使负数的,即从右开始取值

>>> numbers[10:0:-2]   #步长为-2,
[10, 8, 6, 4, 2]

 

相当于字符串相连

 

>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]

注:列表和字符串是不能相加的。

>>> [1,2,3] + ‘world‘

Traceback (most recent call last):
File "<pyshell#145>", line 1, in <module>
[1,2,3] + ‘world‘
TypeError: can only concatenate list (not "str") to list

 序列被重复x次

 

>>> ‘Python‘ * 5
‘PythonPythonPythonPythonPython‘

结合加和乘的例子:

 

sentence = raw_input("Sentence: ")
screen_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width) // 2
print
print ‘ ‘ * left_margin + ‘+‘ + ‘-‘ *(box_width - 2) + ‘+‘
print ‘ ‘ * left_margin + ‘|   ‘ + ‘ ‘ * text_width + ‘  |‘
print ‘ ‘ * left_margin + ‘|   ‘ + sentence + ‘  |‘
print ‘ ‘ * left_margin + ‘|   ‘ + ‘ ‘ * text_width + ‘  |‘
print ‘ ‘ * left_margin + ‘+‘ + ‘-‘ * (box_width -2) + ‘+‘
print

成员资格  检查一个值是否在序列中,可以用in运算符

>>> permissions = ‘rw‘
>>> ‘w‘ in permissions
True
>>> ‘x‘ in permissions
False
>>> users = [‘mlh‘, ‘foo‘, ‘bar‘]
>>> ‘mlh‘ in users
True

再谈几个内建函数 len, min和max

 #len 返回序列所含的元素个数,min,max分别返回序列中最小值和最大值。

>>> numbers = [100, 34, 678]
>>> len(numbers)
3
>>> max(numbers)
678

>>> min(numbers)
34
>>> max(2,3)
3
>>> min(9,3,2,5)
2

 列表的基本操作:

 元素赋值、删除元素、分片赋值、列表方法(append, count, extend, index, insert, pop, remove, reverse, sort)

 元素赋值:

>>> x = [1,1,1]
>>> x[2] = 2
>>> x
[1, 1, 2]

删除元素:可用del语句来实现

>>> name = [‘Alice‘, ‘Beth‘, ‘Cecil‘, ‘Dee-Dee‘, ‘Earl‘]
>>> del name[2]
>>> name
[‘Alice‘, ‘Beth‘, ‘Dee-Dee‘, ‘Earl‘]


>>> numbers = [1,2,3]
>>> del numbers[-1] #删除最后一个元素
>>> numbers
[1, 2]

 

分片赋值: 扩展了元素赋值操作。

>>> name = list(‘Perl‘)
>>> name
[‘P‘, ‘e‘, ‘r‘, ‘l‘]

>>> name[2:] = list(‘ar‘)
>>> name
[‘P‘, ‘e‘, ‘a‘, ‘r‘]

 

>>> numbers = [1,5]
>>> numbers[1:1] = [2,3,4]   #相当于在第一个元素后插入新元素
>>> numbers
[1, 2, 3, 4, 5]

列表方法

 方法:一个与某些对象有紧密联系的函数,对象可能是列表、数字、也有可能是字符串或其它类型的对象。一般可以利用以下方法调用:

对象. 方法(参数)

1、append:用于在列表末尾追加新的对象

>>> a = [1,2,3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

2、count: 统计某个元素在列表中出现的频率

>>> [‘to‘, ‘be‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘].count(‘to‘)
2
>>> x = [[1,2],1,1,[2,1,[1,2]]]
>>> x.count(1)
2
>>> x.count([1,2])
1

3、extend:可以再列表的末尾一次追加一个序列中多个值。跟+操作不一样的地方是它改变了原有的对象。如下例

#使用extend改变对象a

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]

 

#使用+不改变对象a

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a+b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]

4、index:用于从列表中找出某个值第一个匹配项的索引位置。第一个元素索引是0

>>> numbers = [[1,2],1,1,[2,1,[1,2]]]
>>> numbers.index(1)
1
>>> numbers.index([1,2])
0

5、insert:用于将对象插入列表中

>>> a = [1,2,3,4,5,6]
>>> a.insert(3,‘four‘)
>>> a
[1, 2, 3, ‘four‘, 4, 5, 6]

6、pop:移除列表中的一个元素(默认是最后一个元素),并返回该元素的值   对应于数据结构中的栈pop操作

>>> x = [1,2,3]
>>> x.pop(0)
1
>>> x
[2, 3]

7、remove:用于移除列表中某个值的第一个匹配项

>>> x = [‘to‘, ‘be‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘]
>>> x.remove(‘be‘)
>>> x
[‘to‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘]

如果没有匹配项就会报错

>>> x.remove(‘bee‘)

Traceback (most recent call last):
File "<pyshell#190>", line 1, in <module>
x.remove(‘bee‘)
ValueError: list.remove(x): x not in list

 

8、reverse:将列表中的元素反向存放

>>> x = [‘to‘, ‘be‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘]
>>> x.reverse()
>>> x
[‘be‘, ‘to‘, ‘not‘, ‘or‘, ‘be‘, ‘to‘]

9、sort:对列表进行排列  按从小到大排列

>>> numbers =[2,5,9,7]
>>> numbers.sort()
>>> numbers
[2, 5, 7, 9]

如果要对排列好的列表进行赋值时,千万不要使用以下两种方式:

1

>>> x = [1,2,6,4,3]
>>> y = x.sort()   #实际上只对x排序,没有把排序后的结果赋值给y
>>> x
[1, 2, 3, 4, 6]
>>> y    
>>> print y
None

2  #x y 都进行排序了

>>> x = [1,2,6,4,3]
>>> y = x
>>> y.sort()
>>> x
[1, 2, 3, 4, 6]
>>> y
[1, 2, 3, 4, 6]

有效的方式:

>>> x = [1,2,6,4,3]
>>> y = x[:]
>>> y.sort()
>>> x
[1, 2, 6, 4, 3]
>>> y
[1, 2, 3, 4, 6]

或者可以引入sorted函数

>>> x = [1,2,6,4,3]
>>> y = sorted(x)
>>> x
[1, 2, 6, 4, 3]
>>> y
[1, 2, 3, 4, 6]

 

Python学习(2)