【十二】列表对象方法和元组对象方法

列表对象方法和元组对象方法

前言

列表(List)

  • List是可变的,它是序列
  • 在方括号中添加元素,并使用逗号隔开
list0 = []
list1 = ['China', 1997, 2000]
list2 = [1, 2, 3, 4, 5]
list3 = ["a", "b", "c", "d"]
list4 = ['red', 'green', 'blue', 'yellow', 'white', 'black']

修改列表

列表是可变的,所以我们可以通过索引和切片的方式来对列表的元素进行修改

list1 = ["h", "e", "l", "l", "o", " ", "1", "牛", "3"]
# 通过索引把列表下标为4对应的元素改为 "-"
list1[4] = "-"
print(list1) # ['h', 'e', 'l', 'l', '-', ' ', '1', '牛', '3']

# 通过切片把列表的前 4 个元素变成大写的字母
list1[0: 4] = ["H", "E", "L", "L", "O", '不定长修改']
print(list1) # ['H', 'E', 'L', 'L', 'O', '不定长修改', '-', ' ', '1', '牛', '3']


# 插入数据
list2 = [1, 2, 3]
list2[0:0] = ['表头插入数据']
list2[len(list2):] = ['表尾插入数据']
print(list2)  # ['表头插入数据', 1, 2, 3, '表尾插入数据']

list([iterable])

  • 将一个iterable对象转化为列表并返回,如果没有传入参数返回空的列表
print(list()) # []
print(list("China")) # ['C', 'h', 'i', 'n', 'a']
print(list((1, 2, 3))) # [1, 2, 3]
print(list({1: 2, 3: 4})) # [1, 3]
print(list({1, 2, 3, 4})) # [1, 2, 3, 4]

列表对象方法

list.append(x)

  • 在列表的末尾添加一个元素(修改原列表,无返回值),相当于 a[len(a):] = [x]
li = [1, 2]
li.append(1)  # 添加数字
print(li)
li.append("1")  # 添加字符串
print(li)
li.append([1, 2])  # 添加列表
print(li)
# [1, 2, 1]
# [1, 2, 1, '1']
# [1, 2, 1, '1', [1, 2]]
li.append((3, 4))  # 添加元组
print(li)
li.append({"身高": 175})  # 添加字典
print(li)
li.append({5, 6})  # 添加集合
print(li)
# [1, 2, 1, '1', [1, 2], (3, 4)]
# [1, 2, 1, '1', [1, 2], (3, 4), {'身高': 175}]
# [1, 2, 1, '1', [1, 2], (3, 4), {'身高': 175}, {5, 6}]

list.extend(iterable)

  • 使用 iterable 中的所有元素来扩展列表(修改原列表,无返回值), 相当于 a[len(a):] = iterable
li = [1, 2]
li.extend("1")  # 添加字符串中的元素
print(li)
li.extend([1, 2])  # 添加列表中的元素
print(li)
li.extend((3, 4))  # 添加元组中的元素
print(li)
# [1, 2, '1']
# [1, 2, '1', 1, 2]
# [1, 2, '1', 1, 2, 3, 4]
li.extend({"身高": 175})  # 添加字典中的 键
print(li)
li.extend({5, 6})  # 添加集合中的元素
print(li)
# [1, 2, '1', 1, 2, 3, 4, '身高']
# [1, 2, '1', 1, 2, 3, 4, '身高', 5, 6]

list.insert(i, x)

  • i:要插入的元素的索引
  • x:要插入的元素
  • 在给定的位置插入一个元素(修改原列表,无返回值
li = [1, 2, 3, 4, True, False]
a = [5, 6, 7]

li.insert(1, a)  # 相当于li[1:1] = [[5, 6, 7]]
print(li)  # [1, [5, 6, 7], 2, 3, 4, True, False]

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

  • key:指定一个函数, 在排序之前, 列表每个元素先应用这个函数之后再
  • 对原数据进行排序
  • reverse:默认为 False,代表升序,指定为 True 则降序 对原列表进行排序,无返回值
num_list = [1, -2, 5, -3]

# 默认reverse=False升序
num_list.sort()
print(num_list) # [-3, -2, 1, 5]

# 指定reverse=True降序
num_list.sort(reverse=True)
print(num_list) # [5, 1, -2, -3]

# key指定为内置函数abs(x), 列表中的每个元素在排序之前, 先应用这
个函数,然后根据应用之后的大小来对原数据排序
num_list.sort(key=abs) # [1, -2, 5, -3] abs-> [1, 2,5, 3] -> [1, 2, 3, 5]
print(num_list) # [1, -2, -3, 5]

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

  • iterable:可迭代对象(字符串,列表,元组,字典,集合等)
  • key:指定一个函数, 在排序之前, 每个元素都先应用这个函数之后再排序
  • reverse:默认为 False,代表升序,指定为 True 则降序
  • 对可迭代对象进行排序(不对原数据进行操作),以列表形式返回

sort 和 sorted 的区别: list.sort 是只针对列表的排序,对原数据进行操作,无返回值,是列表的对象方法

sorted 可以对所有可迭代的对象进行排序,不对原数据操作,有返回值,是内置函数

num_tup = (1, -2, 5, -3)
result = sorted(num_tup, reverse=False)
print(result)  # [-3, -2, 1, 5]

result = sorted(num_tup, reverse=True)
print(result)  # [5, 1, -2, -3]

result = sorted(num_tup, key=abs)
print(result)  # [1, -2, -3, 5]

list.reverse()

  • 对列表中的元素反向, 无返回值
li = [1, 3, 5, 2]
li.reverse()
print(li) # [2, 5, 3, 1]


reversed(seq)

  • 对给定序列返回一个反向迭代器

reverse 和 reversed 区别: list.reverse是只针对列表的,对原数据进行操作,无返回值,是列表的对象方 法

reversed 是针对序列的,不对原数据操作,返回一个反向迭代器,是内置函数

seqString = 'hello world'
result = reversed(seqString)
print(result)  # 一个反向迭代器 #<reversed object at 0x0000021ED98CEDA0>

print(list(result))  # list转化成列表 # ['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']

list.count(x)

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

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

  • x:要找的值
  • start:查找的起始索引位置,默认为 0
  • end:查找的结束索引位置(不包括这个索引),默认为 len(list)
  • 返回从列表中第一次找到指定值 x 的位置索引,找不到则抛出 ValueError 异常
  • 注意:返回的索引是相对于整个序列开始计算的,而不是 [start:stop] 的子序列
a = [1, 2, 3, 4, 3, 2, 3]

# 找到第一个3的位置索引是2
print(a.index(3)) # 2
# 在索引[3,5)位置区间, 找到第一个3的位置索引是4
print(a.index(3, 3, 5)) # 4

list.pop([i])

  • i:要删除元素的索引
  • 删除列表给定位置的元素(修改原列表)并返回该元素
  • 如果没有给定位置,将会删除并返回列表中的最后一个元素
li = [1, 2.3, 2+3j, "4", True, False]
print(li.pop()) # 未给定参数,则删除最后一个元素并返回
print(li) # 删除元素后的列表

print(li.pop(2)) # 删除索引2对应的元素
print(li) # 删除元素后的列表

list.remove(x)

  • 移除列表中第一个匹配到的值为 x 的元素(修改原列表,无返回值
  • 如果没有这样的元素,则抛出 ValueError 异常
li = [1, 2, 4, 2, 3, 3]

li.remove(2) # 移除第一个2
li.remove(3) # 移除第一个3
print(li) # [1, 4, 2, 3]

li.remove(5) # 没有5,则抛出 ValueError 异常

list.copy()

  • 返回列表的一个浅拷贝,等价于a[:]
li1 = [1, 2, 4, 2, 3, 3]
li2 = li1.copy()
print(id(li1), id(li2)) # 2383560979528 2383533248840
print(li2) # [1, 2, 4, 2, 3, 3]


list.clear()

  • 移除列表中的所有元素(修改原列表,无返回值),等价于 del a[:]
li = [1, 2, 4, 2, 3, 3]

li.clear()
print(li) # []

前言

元组(Tuple)

  • Tuple 与 List 类似,它也是序列,但 Tuple 是不可变的
  • 在圆括号中添加元素,并使用逗号隔开(或者不加括号也认为是元组
# 空元组
tup = ()
print(type(tup))

# 空列表
lis = []
print(type(lis))

# 元组
tup = (1, )
print(tup)
print(type(tup))

# 数字
num = (1)
print(num)
print(type(num))

# 列表
lis = [1, ]
print(lis)
print(type(lis))

# 列表
lis = [1]
print(lis)
print(type(lis))

tup1 = ('China', 1997, 2000)
tup2 = (1, 2, 3, 4, 5)
tup3 = "a", "b", "c", "d" # 不需要括号也可以



# Tuple 是不可变的,但是 Tuple 中的列表是可变的
tup = (1, 2, [3, 4, 5])
# lis = tup[2]
# lis[2] = 6
tup[2][2] = 6
print(tup)




tuple([iterable])

  • 返回一个新的 tuple 对象,其元素来自于 iterable,如果未指定 iterable,则将返回空元组
print(tuple()) # 返回空元组 ()
print(tuple("China")) # ('C', 'h', 'i', 'n', 'a')
print(tuple([1, 2, 3])) # (1, 2, 3)
print(tuple({1: 2, 3: 4})) # (1, 3)
print(tuple({1, 2, 3, 4})) # (1, 2, 3, 4)

元组对象方法

tuple.count(x)

  • 返回元素 x 在元组中出现的次数
a = (1, 23, 1, 3, 23, "23")
print(a.count(23)) # 2

tuple.index(x[, start[, stop]])

  • x:要找的值
  • start:查找的起始索引位置,默认为 0
  • stop:查找的结束索引位置(不包括这个索引),默认为 len(list)
  • 返回从元组中第一次找到指定值 x 的位置索引找不到则抛出 ValueError 异常
  • 注意:返回的索引是相对于整个序列开始计算的,而不是 [start:stop] 的子序列
a = (1, 2, 3, 4, 3, 2, 3)

# 找到第一个3的位置索引是2
print(a.index(3)) # 2
# 在索引[3,5)位置区间, 找到第一个3的位置索引是4
print(a.index(3, 3, 5)) # 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值