标签:python
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还提供了排序方法。
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,如下:
>>> 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]
假定我们存在下面的一个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个元素。
标签:python
原文地址:http://blog.csdn.net/tomato__/article/details/44752525