python5:序列之list

list是可变序列,通常用于存储同类型的元素。下面介绍list的专用方法,并且介绍几种使用list的数据结构。

构造list

list可以使用下面几种方法构造: 1)用一对方括号表示一个空list:[]; 2)用方括号,元素使用逗号分隔:[a],[a,b,c]; 3)用表达式:[x for x in iterable]; 4)使用list函数:list()或者list(iterable)。这里list函数用于构造一个list。如果参数为空,则创建一个空的list。iterable可以是一个序列、支持迭代的容器或者迭代对象,如果iterable已经是一个list,则返回该list的拷贝,,类似于iterable[:]。下面是具体的例子:

>>> list(‘abc’)[‘a’, ‘b’, ‘c’]>>> list((1,2,3))[1, 2, 3]

除了上面介绍的方法,还有一些方法也产生list,例如sorted() 方法。

list的方法

list实现了所有序列的公共方法和可变序列的方法,另外,list还提供了排序方法。

sort

sort用于对list进行原位排序,即会改变原来的list,让其中的元素按一定的顺序排列,例如:

>>> s = [7,2,4,1,6,9,8]>>> s.sort()>>> s[1, 2, 4, 6, 7, 8, 9]

sort不会返回值,如果你不想改变原list,则需要先将数据进行一次拷贝:

>>> s = [7,2,4,1,6,9,8]>>> other = s[:]>>> other.sort()>>> s[7, 2, 4, 1, 6, 9, 8]>>> other[1, 2, 4, 6, 7, 8, 9]

或者你可以使用sorted函数,它返回新的原list的排序后的list:

>>> s = [7,2,4,1,6,9,8]>>> other = sorted(s)>>> s[7, 2, 4, 1, 6, 9, 8]>>> other[1, 2, 4, 6, 7, 8, 9]

高级排序

sort默认按升序排列元素,如果按照特定的方式排序,则需要指定参数,sort支持的参数如下: sort(*,key=None,reverse=None)key指定排序的key,reverse指定执行是否逆序。看下面的例子:

>>> x = [‘kjkeikkkll’, ’34r5fd’,’1qw’,’12333333333333333′,’kiooo’]>>> x.sort(key=len)>>> x[‘1qw’, ‘kiooo’, ’34r5fd’, ‘kjkeikkkll’, ‘12333333333333333’]>>> s = [7,2,4,1,6,9,8]>>> s.sort(reverse=True)>>> s[9, 8, 7, 6, 4, 2, 1]

在2.x的python版本还可以指定cmp,表示比较函数,不过使用key也能代替cmp,如定义一个key函数:

def toValue(x): return x[‘age’]

然后在排序中使用该函数:

persons=[{‘name’:’ZhangSan’,’age’:16},{‘name’:’LiSi’,’age’:12}]persons.sort(key=toValue)print(persons)

也可以使用lambda表达式来做:

>>> persons=[{‘name’:’ZhangSan’,’age’:16},{‘name’:’LiSi’,’age’:12}]>>> persons.sort(key=lambda a : a[‘age’])>>> persons[{‘age’: 12, ‘name’: ‘LiSi’}, {‘age’: 16, ‘name’: ‘ZhangSan’}]

list推导

假定我们需要构造一个list,如下:

>>> s = []>>> for x in range(10): s.append(x**2)>>> s[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

我们能用更简洁的方式来做这个事情:

>>>list(map(lambda x:x**2,range(10)))[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

map(function,iterable,…)的作用是生成一个迭代器,使用function到每一个条目。或者,也可以使用下面的方式:

>>> [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

这样更简洁,可读性也更好。也可以用在多元的列表上:

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y][(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

或者为单个元素使用多个for:

>>> vec = [[1,2,3], [4,5,6], [7,8,9]]>>> [num for elem in vec for num in elem][1, 2, 3, 4, 5, 6, 7, 8, 9]

嵌套list推导

假定我们存在下面的一个3*4的矩阵:

>>> matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]

可以使用该矩阵生成一个嵌套list:

>>> [[row[i] for row in matrix] for i in range(4)][[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

也就是取matrix中每行的第i个元素组成一个新的list,并将该list作为嵌套list的第i个元素。

击败不等于击倒,跌倒了,爬起来,想一想,为什么跌倒了,

python5:序列之list

相关文章:

你感兴趣的文章:

标签云: