加入收藏 | 设为首页 | 会员中心 | 我要投稿 咸宁站长网 (https://www.0715zz.cn/)- 文字识别、智能机器人、媒体智能、低代码、运维!
当前位置: 首页 > 运营中心 > 交互 > 正文

python之列表list方法分类整理

发布时间:2022-08-25 10:37:37 所属栏目:交互 来源:互联网
导读:题记 将自带的方法分类整理、验证并做成例子, 方便记忆与理解 起初 是为了方便自己查找, 后来因为越来越受欢迎, 所以分享出来 基本的增删改查,insert,pop def test_1(): # 增删改查,增和删 list1 = [a, b, c] list1.append(d) assert [a, b, c, d] == list
  题记
 
  将自带的方法分类整理、验证并做成例子, 方便记忆与理解
 
  起初
 
  是为了方便自己查找, 后来因为越来越受欢迎, 所以分享出来
 
  基本的增删改查,insert,pop
 
  def test_1():
  # 增删改查,增和删
  list1 = ['a', 'b', 'c']
  list1.append('d')
  assert ['a', 'b', 'c', 'd'] == list1, 'append error'
  del list1[0]
  assert ['b', 'c', 'd'] == list1, 'del error'
  list1[0] = 'e'
  assert ['e', 'c', 'd'] == list1, 'update error'
  c = list1[1]
  assert 'c' == c, 'query error'
 
  list1.insert(1, 'f')
  assert ['e', 'f', 'c', 'd'] == list1, 'insert error'
  list1.pop(1)
  assert ['e', 'c', 'd'] == list1, 'pop error'
  list1.pop()
  assert ['e', 'c'] == list1, 'pop 2 error'
 
  2.list方法, +操作符, in, enumerate
 
  def test_2():
  # 方法:list(p), + , in,enumerate
  list1 = list('abc')
  assert ['a', 'b', 'c'] == list1, 'list(p) 方法错误'
  list1 = list1 + ['d', 'e']
  assert ['a', 'b', 'c', 'd', 'e'] == list1, 'list相加错误'
  assert 'a' in list1, 'list的in操作错误'
 
  list2 = list({'name': 'a', 'age': 19})
  assert ['name', 'age'] == list2, 'list(p) 方法错误'
 
  indexs = [i for i, _ in enumerate(list2)]
  assert [0, 1] == indexs, 'enumerate error'
 
  3. append和extend
 
  def test_3():
  # append 和 extend
  list1 = ['a', 'b', 'c']
  list2 = ['d', 'e']
  list_append = list1.copy()
  list_append.append(list2)
  assert ['a', 'b', 'c', ['d', 'e']] == list_append, 'list append方法错误'
  list_extend = list1.copy()
  list_extend.extend(list2)
  assert ['a', 'b', 'c', 'd', 'e'] == list_extend, 'list extentd 方法错误'
 
  4.index 和 sort方法
 
  def test_4():
  # list.index(obj),sort
  list1 = ['b', 'c', 'a']
  i = 0
  for v in list1:
  assert list1.index(v) == i, f'list index方法错误 i:{i},v:{v}'
  i += 1
 
  list1.sort()
  assert ['a', 'b', 'c'] == list1, 'list sort 方法错误'
  list1.sort(reverse=True)
  assert ['c', 'b', 'a'] == list1, 'list sort reverse 方法错误'
 
  list2 = [{
  'name': 'b',
  'age': 20
  }, {
  'name': 'a',
  'age': 18
  }, {
  'name': 'b',
  'age': 19
  }]
  list2.sort(key=lambda kv: kv['name'])
  assert {'name': 'a', 'age': 18} == list2[0], 'list sort key方法错误'
  list2.sort(key=lambda kv: kv['age'])
  assert [{
  'name': 'a',
  'age': 18
  }, {
  'name': 'b',
  'age': 19
  }, {
  'name': 'b',
  'age': 20
  }] == list2, 'list sort key 方法错误'
  list2.sort(key=lambda kv: (kv['name'], kv['age']))
  assert [{
  'name': 'a',
  'age': 18
  }, {
  'name': 'b',
  'age': 19
  }, {
  'name': 'b',
  'age': 20
  }] == list2, 'list sort key 方法错误'
 
  5.浅复制和深度复制
 
  import copy
 
  def test_5():
  # 浅复制 和 深度复制
  # 只有list1中的数据是引用类型的时候,才会考虑deepcopy,否则,平常的copy就行
  # 也就是说,如果只是修改a,b,c, list3,list4,list5 都不会影响list1
  list1 = ['a', 'b', 'c', ['e', 'f']]
  list2 = list1
  list3 = list1[:]
  list4 = list1.copy()
  list5 = [i for i in list1]
  list6 = copy.deepcopy(list1)
 
  assert id(list1) == id(list2), '== error'
  assert id(list1) != id(list3), '[:] error'
  assert id(list1) != id(list4), 'list copy error'
  assert id(list1) != id(list5), 'for error'
  assert id(list1) != id(list6), 'deepcopy error'
 
  list6[3][0] = 'd'
  assert ['a', 'b', 'c', ['e', 'f']] == list1, 'deepcopy 1 error'
  assert ['a', 'b', 'c', ['d', 'f']] == list6, 'deepcopy 2 error'
 
  6.倒着删除: 为了防止删除时报错或者数据不对
 
  # 正确的删除方式
  def test_6():
  list1 = ['a', 'b', 'c', 'd']
  for i in range(len(list1) - 1, -1, -1):
  del list1[i]
  assert [] == list1, 'list delete error'
  # 错误的方式
  def test_7():
  # 不要这样删除:https://blog.51cto.com/u_14246112/3157689
  list1 = ['a', 'b', 'c']
  for i in list1:
  list1.remove(i)
  # 本意是删除所有元素,但是删除的过程中列表发生了位移,所以删除了 a和c
  assert ['b'] == list1, 'list delete 2 error'
 
  7.拆分: n:小集合的长度为n
 
  def test_8():
  a1 = [i for i in range(100)]
  s1 = split_list_by_size(a1, 7)
  # 每个小集合应该都是7,最后一个是小于等于7
  assert len(s1[-1]) <= 7, 'split size 1 error'
  s1.pop()
  for i in s1:
  assert len(i) == 7, 'split size 2 error'
 
  def split_list_by_size(raw_list, n):
  # n:小集合的长度为n
  l = len(raw_list)
  return [raw_list[i:i + n] for i in range(0, l, n)]
  8. 拆分: n:有多少个小集合
 
  def test_9():
  a1 = [i for i in range(100)]
  s1 = split_list_by_number(a1, 7)
  # 大集合中有7个小集
  assert len(s1) == 7, 'split number 2 error'
 
  def split_list_by_number(raw_list, n):
  # n:有多少个小集合
  l = len(raw_list)
  s = int(l / n) + 1
  return [raw_list[i:i + s] for i in range(0, l, s)]

(编辑:咸宁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读