Python——标准数据结构(列表)

129 阅读3分钟

列表(List)

  1. 特性:可变,是序列
  2. 列表用方括号定义,元素没有类型限制

修改列表

列表的元素重新赋值方式:索引和切片

lst = [567, 'hello', 78.9, 'world', False] 

针对一个元素: 格式: lst[index] = object

lst[2] = 9.87
lst[3] = 'dlrow' 
print(lst)

针对多个元素: 格式: lst[start: end: step] = iterable

1 vs 1

lst[2:3] = [9.87]

n vs n

lst[2:4] = [9.87, 'dlrow'] # lst[2] = 9.87 ; lst[3] = 'dlew'

1 vs n 【必须step为1】

lst[2:3] = [7, 8, 9] # lst[2] = [7, 8, 9]

n vs m 【必须step为1】

lst[2:4] = [1, 2, 3] lst[1:4] = [1, 2]

1 vs 0 【必须step为1】

lst[2:3] = []

n vs 0 【必须step为1】

lst[1:4] = []

n vs n 【必须step不为1】

lst[1::2] = ['a', 'b']

插入一个元素

lst[0:0] = ['a']
lst[1:1] = ['b']
lst[len(lst):] = ['c']

插入多个元素

lst[0:0] = ['a', 'b', 'c']
lst[1:1] = ['d', 'f']
lst[len(lst):] = ['x', 'y', 'z']
print(lst)

list([iterable])

  • 将一个iterable对象转化为列表并返回
print(list())          # []
print(list("hello"))   #['h', 'e', 'l', 'l', 'o']
print(list((1, 2, 3))) #[1, 2, 3]

# 字典作为一个iterable, 只有键参与迭代
print(list({1: 2, 3: 4})) #[1, 3]

列表方法:

list.append(object)

  • 往列表中追加一个元素,无返回值
  • 相当于 lst[len(lst):] = [object]
lst = [1, 2, 3]
lst.append(4)
print(lst) #[1, 2, 3, 4]

lst[len(lst):] = [4]   #object这个位置不能用于添加列表
print(lst) #[1, 2, 3, 4, 4]

lst.append([5, 6])
print(lst) #[1, 2, 3, 4, 4, [5, 6]]

list.extend(iterable)

  • 使用 iterable 中的所有元素来扩展列表,无返回值
  • 相当于 lst[len(lst):] = iterable
lst = [1, 2, 3] 
lst.extend([5, 6])
print(lst) # [1, 2, 3, 5, 6]

lst[len(lst):] = [5, 6]
print(lst) #[1, 2, 3, 5, 6, 5, 6]

list.insert(index, object)

  • index:要插入元素的位置
  • object:要插入的元素
  • 在指定位置插入一个元素,无返回值
  • 相当于lst.extend([a, b])
  • 单个字符时,相当于lst.append(4),也相当于lst[len(lst):] = [4]
lst = [1, 2, 3, 4]
lst.insert(1, ['a', 'b'])  # [1, ['a', 'b'], 2, 3, 4]
print(lst)

lst.insert(len(lst), ['a', 'b'])
print(lst) # [1, ['a', 'b'], 2, 3, 4, ['a', 'b']] 

list.sort( [key], reverse=False)

  • key:指定一个函数,在排序之前,列表每个元素先应用这 个函数,再根据函数的返回值对原数据进行排序
  • 对原列表进行排序,无返回值
lst = [1, 2, -5, -3]
# 降序排序
lst.sort(reverse=True)
print(lst) #[2, 1, -3, -5]
lst.sort(key=abs, reverse=True)
print(lst) #[-5, -3, 2, 1]

sorted(iterable, [key], reverse=False)

  • iterable:要排序的可迭代对象
  • key:指定一个函数,在排序之前,每个元素都先应用这个 函数之后再排序
  • reverse:默认为 False,代表升序,指定为 True 则为降序 对可迭代对象进行排序,以列表形式返回排序之后的结果

list.reverse()

  • 把列表中的元素倒过来,无返回值
lst = [1, 3, 5, 2] 
lst.reverse()  
# print(lst) 

lst = [1, 3, 5, 2] 
print(lst[::-1])  # copy

list.count(x)

  • 返回元素 x 在列表中出现的次数
lst = [1, 2, 3, '23', [2, 4]] 
print(lst.count(2))  # 1

list.index(x[, start[, end]])

  • x:要找的值
  • start:起始索引,默认为 0
  • end:结束索引(开区间),默认为 len(lst)
  • 返回从左边开始第一次找到指定值时的正向索引,找不到报错
lst = [1, 2, 3, 2, '23', [2, 4]] 
print(lst.index(2))  #1
lst.index(2, 4)  # ValueError

list.pop(i=-1)

  • i:要删除并返回的元素的索引
  • 删除列表中指定索引的元素并返回该元素,默认最后一个
  • 索引超出范围,则报错
lst = [567, 'hello', True, False, 456]
print(lst.pop(1))  # 'hello'
print(lst)  # [567, True, False, 456]

list.remove(x)

  • 删除列表中从左往右遇到的第一个x元素,无返回值
  • 如果没有这样的元素,则报错
lst = [1, 2, 4, 2, 3, 3]
lst.remove(2)
lst.remove(2)
lst.remove(2) #ValueError
print(lst)

list.copy()

  • 返回该列表的一个副本
  • 等价于 lst[:]
lst = [567, 'hello', True, False, 456]
new_lst = lst.copy()
print(new_lst) #[567, 'hello', True, False, 456]

list.clear() 移除列表中的所有元素,无返回值 等价于 del lst[:]

lst = [567, 'hello', True, False, 456]
lst.clear()
print(lst)  # []

其他常用方法

chr(i)

  • 返回Unicode码位为指定整数的字符

ord(c)

  • 返回指定字符对应的Unicode码位

abs(number)

  • 内置函数,返回number的绝对值
print(chr(97))  # 'a'
print(ord('a'))  # 97

print(abs(-9))  # 9
print(abs(3+4j))  # 求模, (3^2 + 4^2)^(1/2) = 5.0