1. list的初始化
1.1 使用for初始化list
>>>list1 = [1, 2, 3, 4]
>>>list2 = ['a', 'b', 'c']
# 这种写法结果元素数量 = list1元素数量 *
>>>list3 = [(i, j) for i in list1 for j in list2]
>>>list3
[(1, 'a'),
(1, 'b'),
(1, 'c'),
(2, 'a'),
(2, 'b'),
(2, 'c'),
(3, 'a'),
(3, 'b'),
(3, 'c'),
(4, 'a'),
(4, 'b'),
(4, 'c')]
>>>list4 = [(i, j) for i, j in zip(list1, list2)]
>>>list4
[(1, 'a'), (2, 'b'), (3, 'c')]
2. 增删改查
2.1 增加元素
1)append(object): 在list的尾部增加元素
注意:无返回值,会直接改变原列表;
>>>list1 = [1, 2, 3, 4]
>>>res = list1.append(54)
>>>list1
[1, 2, 3, 4, 54]
>>>type(res)
NoneType
2)insert(index, object): 在索引index之前插入元素object;
也可以理解为,插入之后,object的索引为index;
注意:无返回值,会直接改变原list;
注意:如果index大于最大索引,则会在list末尾增加元素;
>>>a = [1, 2, 3]
>>>a.insert(0, 111) # 在开头插入元素
a
>>>Out[12]: [111, 1, 2, 3]
>>>a.insert(2, 222) # 在索引2之前插入元素
>>>a
Out[14]: [111, 1, 222, 2, 3]
>>>a.insert(100, 333) # 在list末尾插入元素
>>>a
Out[16]: [111, 1, 222, 2, 3, 333]
>>>a.insert(-1, 999) # 在末尾元素之前插入元素
>>>a
Out[19]: [111, 1, 222, 2, 3, 999, 333]
2.2 list合并
1) 用 + 合并list
多个list可以直接用加号来合并
>>>list1 = [1, 2, 3, 4]
>>>list2 = ['a', 'b', 'c']
>>>list3 = list1 + list2
>>>list3
[1, 2, 3, 4, 'a', 'b', 'c']
2) 使用 * 展开list进行合并
>>>list1 = [1, 2, 3, 4]
>>>list2 = ['a', 'b', 'c']
>>>list4 = [*list1, *list2]
>>>list4
[1, 2, 3, 4, 'a', 'b', 'c']
3) extend(iterable) : 将可迭代对象中的元素插入到list末尾
>>>a = [1, 2, 3]
>>>b = ['a', 'b', 'c']
>>>a.extend(b) # 合并另一个list中的元素
>>>a
Out[34]: [1, 2, 3, 'a', 'b', 'c']
>>>c = (100, 200) # 合并tuple中的元素
>>>a.extend(c)
>>>a
Out[38]: [1, 2, 3, 'a', 'b', 'c', 100, 200]
>>>d = {'A':33, 'B':54} # 合并dict中的元素(只能合并键key)
>>>a.extend(d)
>>>a
Out[43]: [1, 2, 3, 'a', 'b', 'c', 100, 200, 'A', 'B']
>>>e = set([3,3,5]) # 合并set中的元素
>>>a.extend(e)
>>>a
Out[47]: [1, 2, 3, 'a', 'b', 'c', 100, 200, 'A', 'B', 3, 5]
2.3 删除元素
1) remove(object): 按值删除元素(删除某个值的第一个出现)
注意:没有返回值,执行后会直接改变原列表的内容。
注意:如果list中有多个相同的元素,remove只会删除一个,不会把相同的元素全部删掉。
注意:如果list中不存在object,则会报错。
>>>list1 = [1, 2, 3, 4]
>>>res = list1.remove(3)
>>>list1
[1, 2, 4]
>>>type(res)
NoneType
>>>a = [1,2,3,3,4] # 只删除第一个出现
>>>a.remove(3)
>>>a
Out[50]: [1, 2, 3, 4]
2) pop(index= -1): 按索引删除元素,默认删除末尾元素
返回值为删除的元素的值;
注意:如果索引超出范围或list为空,会报错;
>>>a = [1,2,3,4]
>>>a.pop()
Out[53]: 4
>>>a
Out[54]: [1, 2, 3]
>>>a.pop(0) # 删除
Out[55]: 1
>>>a
Out[56]: [2, 3]
>>>a.pop(5) # 索引超出范围或list为空,会报错
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-57-353f8a3b72c0>", line 1, in <module>
a.pop(5)
IndexError: pop index out of range
3)clear() : 清除list中所有元素
无返回值,执行完后原list变为空list;
>>>a = [1,2,3,4]
>>>a
Out[62]: [1, 2, 3, 4]
>>>type(a)
Out[64]: list
>>>a.clear()
>>>a
Out[66]: []
>>>type(a)
Out[67]: list
2.4 改
直接使用 a[ind] = new_value 的方式修改索引ind处的值;
>>>a = [1,2,3]
>>>a[0] = 999
>>>a
Out[70]: [999, 2, 3]
>>>a[-1] = 9009
>>>a
Out[72]: [999, 2, 9009]
2.5 查
1) index(object, start, stop) : 返回首次出现object这个值的索引
在list的[start, stop)索引范围内查找object。
返回:首次出现object的索引;
注意:范围不包含stop!
注意:当list中不存在object时,会报错!
>>>a = [1, 2, 3, 4, 5, 6, 999, 2, 9009]
>>>a.index(1)
Out[91]: 0
>>>a.index(4)
Out[92]: 3
>>>a.index(2) # 返回第一个2出现的索引
Out[93]: 1
>>>a.index(4, 0, 4) # # 实际检索的索引范围是[0, 3],所以能查到4
Out[94]: 3
>>>a.index(4, 0, 3) # 实际检索的索引范围是[0, 2],所以查不到4
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-95-123898f8a295>", line 1, in <module>
a.index(4, 0, 3)
ValueError: 4 is not in list
3. 排序
3.1 sort(key=None, reverse=False): list自带的排序方法
key – 当list中存储的是其它可迭代对象时,如list、tuple、set等,可以通过key传入自定义的方法,用来选择排序时根据可迭代对象中的第几个元素来排序;更高阶的,可以根据可迭代对象中的某几个元素的运算结果来排序。 建议使用lambda表达式来自定义函数!
reverse – 排序方向,reverse = False 升序(默认),reverse = True 降序, 。
注意:sort()方法无返回值,直接改变原list。
例1:常用,通过reverse改变排序方向:
>>>a = [98, 76, 108, 12, 2, 999]
>>>a
Out[9]: [98, 76, 108, 12, 2, 999]
>>>a.sort()
>>>a
Out[11]: [2, 12, 76, 98, 108, 999]
>>>a.sort(reverse=True)
>>>a
Out[13]: [999, 108, 98, 76, 12, 2]
例2:对复杂结构的list排序 :key传入自定义函数( 建议使用lambda表达式! )
>>>def take_second(tup): # tup为list中的子迭代对象,return tup[1]是指返回子对象中的第2个元素
return tup[1]
>>>b = [('a', 3), ('b', 1), ('c', 99)]
>>>b.sort(key=take_second) # 根据tuple中的第2个元素对tuple来进行排序
>>>b
Out[22]: [('b', 1), ('a', 3), ('c', 99)]
>>>b.sort(key=take_second, reverse=True)
>>>b
Out[24]: [('c', 99), ('a', 3), ('b', 1)]
>>>b = [('a', 3), ('b', 1), ('c', 99)]
>>>b.sort(key=lambda x: x[1]) # 建议使用lambda表达式!
>>>b
Out[35]: [('b', 1), ('a', 3), ('c', 99)]
例3:根据名字的长度排序
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>def length_of_name(tup):
return len(tup[0])
>>>c.sort(key=length_of_name)
>>>c
Out[29]: [('sun', 1), ('wang', 3), ('tian', 99), ('aduan', 203)]
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>c.sort(key=lambda x: len(x[0]))
>>>c
Out[29]: [('sun', 1), ('wang', 3), ('tian', 99), ('aduan', 203)]
例4:根据名字的首字母的字母顺序排序
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>c.sort(key=lambda x: x[0][0])
>>>c
Out[44]: [('aduan', 203), ('sun', 1), ('tian', 99), ('wang', 3)]
3.2 sorted(iterable, key=None, reverse=False)
Python的内建函数sorted,可以对所有可迭代对象排序,当然也可以对list排序;
key和reverse参数与list的sort方法一致:
key – 当list中存储的是其它可迭代对象时,通过key传入自定义函数,用来选择排序时根据什么规则;简单说就是根据自定义函数返回值的大小来对原对象进行排序。 建议使用lambda表达式来自定义函数!
reverse – 排序方向,reverse = False 升序(默认),reverse = True 降序 。
注意: 返回值是排序后的可迭代对象,不会改变原对象的值!
例1:根据名字的首字母的字母顺序排序; (可以看到原list不变,返回的是一个排序好的新的list)
>>>c = [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]
>>>sorted(c, key=lambda x: x[0][0])
Out[47]: [('aduan', 203), ('sun', 1), ('tian', 99), ('wang', 3)]
>>>c
Out[48]: [('wang', 3), ('sun', 1), ('tian', 99), ('aduan', 203)]