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

部分来源《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)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值