序列方法
len
+
*
索引
索引值必须在序列边界内,否则会引发错误
赋值
元素赋值x[i] =
分片
索引值超出边界可以工作,Python会自动缩放超出边界的分片使其可用,比如l[3:1]会被缩放成l[3:3],l[-100:3]会被缩放成l[0:3]
分片赋值
比较厉害的是分片赋值的序列可以和将要覆盖的序列不等长。所以虽然是赋值操作,但也可以实现插入、删除操作。比如覆盖的序列是空序列[2:2],那么就是插入;要赋的序列是空序列,对应着删除。但是在实际中并不常见。
列表方法:
append
append(x)
在列表后添加元素,修改原来的列表,返回None。
extend
extend(list)
在列表后面添加list的所有元素,修改原有列表。
insert
insert(pos, x)
将元素x插入pos对应的位置。修改原有列表。
remove
remove(x)
删除列表中第一个值为x的元素。修改原有列表。
pop
pop()
从列表中删除一个元素并返回该元素的值,默认是最后一个元素, a.pop(), a.pop(2)。利用pop方法和append方法可以实现栈,利用pop和insert可以实现队列。注意。pop是唯一一个修改元列表并有返回值的方法。修改原有列表。
reverse
reverse()
将原来的列表倒序操作。修改了原有列表。
内置函数reversed(listname),也可以,但返回的是一个迭代器对象。需要list(reversed(listname))
sort
sort(key, reverse=False)
对原有列表进行递增排序,修改了原有列表,返回None值。可以通过传入关键字来修改排序行为:key参数给出了一个单个参数的函数,返回在排序中使用的值。
>>>list = ['abc', 'ABD', 'aBe']
>>>list.sort()
['ABD', 'aBe', 'abc']
>>>list.sort(key=str.lower)
['abc', 'ABD', 'aBe']
>>>list.sort(key=str.lower, reverse=True)
['aBe', 'ABD', 'abc']
内置函数sorted(listname, key, reverse=False)也可以实现列表的排序,参数可以是任何序列,但生成新列表,而不是在原处修改。sort可以接受自定义的比较函数作为参数。这在C++中对应函数谓词(不知道是不是这个名字),这是高级排序的内容,碰到的时候回来细说。
count
count(x)
统计元素x在列表中出现的次数。
index
index(x)
找到列表中匹配元素x的第一个索引位置。
列表解析
列表解析表达式是关于列表的高级操作。列表解析是写在[]中的,而且有使用同一变量名的表达式和循环结构组成。
[row[1] for row in M if row[1] % 2 == 0]
[(x, y) for x in range(5) if x%2==0 for y in range(5) if y%2==1]
可以看出列表解析表达式和map函数很相似,不同之处在于列表解析对序列中的每个元素应用表达式,而map函数对序列中的每个元素应用一个函数。列表解析比map调用快。
其他
list函数
将参数转换成列表形式。如list("hello") ----> ['h', 'e', 'l', 'l', 'o']
join方法
如果想要把由字符组成的列表转换成字符串,就要用到join函数,"".join(['h', 'e', 'l', 'l', 'o'])
del删除
del语句实现原处删除元素或片段:
>>>age = [10, 20, 30]
>>>del age[2]
>>>age
[10, 20]
del语句删除的是变量的名字,以及引用关系,并没有删除值本身。python是没有办法删除值的,当某个值不再使用时,python解释器负责内存的回收。
zip
zip(list1, list2)
可以传入任意的序列对象,一般用于并行循环中。
对列表中所有元素进行计数并找到最常见的几个元素
>>>from collections import Counter
>>>x = [1, 2, 3, 1, 1, 2]
>>>count = Counter(x)
>>>count.most_common(2)#出现次数最多的两个元素值及对应的次数
[(1, 3), (2, 2)]