python中列表list的初始化及增删改查

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\interactiveshell.py", 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\interactiveshell.py", 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)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值