您的位置:首页 > 编程语言 > Python开发

python 列表和列表解析以及排序

2017-12-14 14:17 393 查看
部分来源《python学习手册 》第四版

一、python列表的主要属性:

1)任意对象的有序集合
2)通过偏移量读取
3)可变长度,异构以及任意嵌套
4)属于可变序列分类
5)对象引用数组
In [2]: d = ['a','b']
In [6]: a
Out[6]: [1, 2, 3, 4, 'a', 'b']
In [7]: a[0] =d
In [8]: a
Out[8]: [['c', 'b'], 2, 3, 4, 'a', 'b']
In [9]: d[0]='e'
In [10]: a
Out[10]: [['e', 'b'], 2, 3, 4, 'a', 'b']


二、常见列表常量和操作:

L = []          #一个空的列表
L = ['a','b','c','d']   #新建一个列表,索引为从左往右为0,1,2,3
L = ['abc',['a','b']]   #嵌套列表
L = list("spam")    #将字符串转化为列表,结果为['s','p','a','m']
L[i]
L[i][j]
L[i:j]
len(L)
L1+L2   #合并
L*3     #重复
for x in L:print x  #迭代,成员关系
L.append(4) #方法4
L.extend([1,2,3,4])     #方法同加号
L.insert(i,x)   #在原有L[i]前插入x
L.index(x)      #查x的元素的索引,结果只为第一次匹配到x的。
L.count(x)      #统计L中x元素的个数,非常有用。
L.sort()
如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,
另一种获取已排序的列表副本的方法是使用sorted函数:
另一种获取已排序的列表副本的方法是使用sorted函数:

x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
sorted返回一个有序的副本,并且类型总是列表,如下:
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
L.reverse()     #反转,即倒序。 类似  L[::-1],但这种不会改变原有序列。
del L[k]    #删除索引为k的元素
del L[i:j]  #包含L[i],但不包含L[j] 。  [i,j)
L.pop()     #最后一个元素删除
L[i:j] = []
L.remove(x)  #删除L中值为x的元素。从左往右,只删除一个
L[i:j] = [4,5,6]    #


列表是支持原地修改的。

1)

L.append(x)和L+[x]的区别:

>>> b = [1,2,3,4]
>>> a = [5,6,7,8]
>>> b.append('a')
>>> b
[1, 2, 3, 4, 'a']
>>> b+a
[1, 2, 3, 4, 'a', 5, 6, 7, 8]
>>> b
[1, 2, 3, 4, 'a']


2)sort的应用

>>> L = ['abc','ABD','aBe']
>>> L.sort()
>>> L
['ABD', 'aBe', 'abc']
>>> L.sort(key=str.upper)
>>> L
['abc', 'ABD', 'aBe']
>>> L.sort(key=str.lower)
>>> L
['abc', 'ABD', 'aBe']
>>> L.sort(key=str.lower,reverse=True)
>>> L
['aBe', 'ABD', 'abc']


列表解析:

常见for循环:

>>> for x in range(2):
...     L.append(x)
...
>>> L
[0, 1]


列表解析表达式:

>>> [x for x in range(2)]
[0, 1]


题外话:python的三元运算符a?b:c的python实现:

>>> 1 if 5>3 else 0


匿名函数:lambda表达式

lambda arg1,arg2,arg3,…argN : expression using args

>>> f = lambda x,y,z:x+y+z
>>> f(1,2,3)
6
>>> f = lambda x=1,y=2,z=3:x+y+z
>>> f(2)
7


在序列中映射函数:map

>>> def inc(x): return x+10
...
>>> map(inc,[1,2,3,4])
[11, 12, 13, 14]
>>> map((lambda x:x+3),[1,2,3])
[4, 5, 6]


列表排序:

参考如下:

https://www.cnblogs.com/whaben/p/6495702.html

1)key参数/函数

按key来排序

>>> student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

#sort
>>> s = [('a',12),('b',32),('c',3)]
>>> s.sort(key=lambda k:k[1])
>>> s
[('c', 3), ('a', 12), ('b', 32)]


矩阵的转置

https://www.cnblogs.com/anpengapple/p/5427367.html

由:2*3 —>3*2

>>> b
[(1, 2), (3, 4), (5, 6)]
>>> zip(*b)
[(1, 3, 5), (2, 4, 6)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python