Python学习(十八)——list tuple namedtuple

来源:互联网 发布:kbengine java 编辑:程序博客网 时间:2024/06/11 18:43

list

list是一种有序的集合,可随时添加删除其中的元素。

>>> name=['Jack','Tom','Sunny']>>> name['Jack', 'Tom', 'Sunny']>>> number=[00,01,02,03]>>> number[0, 1, 2, 3]

1. list中的元素索引从0开始,-1、-2、-3表示倒数第1、2、3个元素:

>>> name=['Jack','Tom','Sunny']>>> name[0]'Jack'>>> name[-2]'Tom'>>> name[2]'Sunny'

2. list内的元素的数据类型可以不同,也可以是另一个list:

>>> l=[1,2,3,'abc',[1,2,'xyz']]>>> len(l)5

可将l看做二维数组l[4][2]

>>> x=[1,2,'xyz']>>> l=[1,2,3,'abc',x]>>> x[2]'xyz'>>> l[4][1, 2, 'xyz']>>> l[4][2]'xyz'

3. 在list末尾添加元素,用append():

>>> name=['Jack','Tom','Sunny']>>> name.append('Eva')>>> name['Jack', 'Tom', 'Sunny', 'Eva']

4. count()统计某个元素在列表中出现的次数:

name=['Jack','Tom','Sunny']>>> print name.count('Jack')1

5. extend()在列表末尾一次性追加另一个序列中的多个值:

>>> name=['Jack','Tom','Sunny']>>> number=[00,01,02,03]>>> name.extend(number)>>> print name['Jack', 'Tom', 'Sunny', 0, 1, 2, 3]

注意与append()的区别:

>>> name=['Jack','Tom','Sunny']>>> number=[00,01,02,03]>>> name.append(number)>>> print name['Jack', 'Tom', 'Sunny', [0, 1, 2, 3]]

6. 在list内将元素插入到指定位置,用insert():

>>> name=['Jack','Tom','Sunny']>>> name.insert(2,'Eva')>>> name['Jack', 'Tom', 'Eva', 'Sunny']

注意逆序时插入位置:

>>> name=['Jack','Tom','Sunny']>>> name.insert(-1,'Eva')>>> name['Jack', 'Tom', 'Eva', 'Sunny']>>> name.insert(-2,'Bob')>>> name['Jack', 'Tom', 'Bob', 'Eva', 'Sunny']

7. 用len()函数可获得list元素个数,当list为空即没有一个元素时,长度为0:

>>> len(number)4

8. 将list末尾元素删除,用pop():

>>> name=['Jack','Tom','Sunny']>>> name.pop()'Sunny'>>> name['Jack', 'Tom']

9. 将list内指定元素删除,用pop(i):

>>> name=['Jack','Tom','Sunny']>>> name.pop(1)'Tom'>>> name['Jack', 'Sunny']
>>> name=['Jack','Tom','Sunny']>>> name.pop(-1)'Sunny'>>> name['Jack', 'Tom']

10. list[::-1]将list取逆序

a = range(8)b = ['a','b','c','d']print a[::-1]print b[::-1]

输出:

[7, 6, 5, 4, 3, 2, 1, 0]['d', 'c', 'b', 'a']

7 tuple

与list相似,但初始化后不能修改。空的tuple可写成();

>>> name=('Jack','Tom','Sunny')>>> name('Jack', 'Tom', 'Sunny')>>> name[0]'Jack'>>> name[-1]'Sunny'

只有一个元素的tuple必须加一个逗号,以区分数学公式中的()

>>> x=(5)>>> x5>>> x=(5,)>>> x(5,)

利用tuple可以直接交换变量的值:

>>> a=1.2>>> b=3.4>>> (a,b)=(b,a)>>> print a,b3.4 1.2

tuple[::-1]--tuple取逆序:

b = ('a','b','c','d')print b[::-1]

输出:

('d', 'c', 'b', 'a')

namedtuple

示例:

from collections import namedtuplestu = namedtuple('Student','name ID gender age')print type(stu)Ann = stu(name='Ann', ID=20170101, gender='female', age=73)Jake = stu(name='Jake', ID=20170102, gender='male', age=84)print 'Ann:',Annprint 'Jake`s age:',Jake.age

输出:

<type 'type'>Ann: Student(name='Ann', ID=20170101, gender='female', age=73)Jake`s age: 84

’student’是这个namedtuple的名称,后面的’name ID gender’这个字符串中三个用空格隔开的字符是这个namedtuple的三个元素,分别名为name,ID和gender.
namedtuple使用时类似于Python中的类对象.

注意事项:
1.名称不能使用Python的关键字.
2.不能有重复的元素名称.
解决办法:
将namedtuple的重命名模式打开,这样如果遇到Python关键字或者有重复元素名时,自动进行重命名.

from collections import namedtuplestu = namedtuple('Student','name ID gender age def', rename=True)print stu._fields

输出:

('name', 'ID', 'gender', 'age', '_4')

知道重命名后的元素名后就可以正常使用了.

Ann = stu(name='Ann', ID=20170101, gender='female', age=73, _4=2)print Ann

输出:

Student(name='Ann', ID=20170101, gender='female', age=73, _4=2)