python基础刻意练习--Task 3 列表与元组

Day 3-4

序列(列表与元组)

  • 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
  • Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。下面我们来介绍列表和元组的相关内容。

一、列表

1)创建列表
  • 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。「列表」定义语法为 [元素1, 元素2, …, 元素n]。
  • 列表的数据项不需要具有相同的类型
  • 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week, type(week))
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] <class 'list'>

number = [2, 3, 4, 5, 6, 7]
print(number, type(number))
# [2, 3, 4, 5, 6, 7] <class 'list'>
  • 我们也可以创建一个混合的列表:
mix = [1, 'lsgo', 3.14, [1, 2, 3]]
print(mix)  # [1, 'lsgo', 3.14, [1, 2, 3]]
  • 还可以创建一个空列表:
empty = []
print(empty)  # []
  • 列表中的需要注意的地方:
    1、关键点是「中括号 []」和「逗号 ,」。
    2、中括号 把所有元素绑在一起。
    3、逗号 将每个元素一一分开。
    4、列表是有序集合,没有固定大小,能够保存任意数量任意类型的 Python 对象。

列表不像元组,列表内容可更改 (mutable),因此附加 (append, extend)、插入 (insert)、删除(remove, pop) 这些操作都可以用在它身上。

2)向列表中添加元素
  • append(obj) 在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
week.append('Thursday')
print(week)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday']
print(len(week))  # 6
  • 此元素如果是一个 list,那么这个 list 将作为一个整体进行追加,注意append()extend()的区别。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
week.append(['Thursday', 'Sunday'])
print(week)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', ['Thursday', 'Sunday']]
print(len(week))  # 6
  • extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
week.extend(['Thursday', 'Sunday'])
print(week)  
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday', 'Sunday']
  • 严格来说 append 是追加,把一个东西整体添加在列表后,而 extend 是扩展,把一个东西里的所有元素添加在列表后。
  • insert(index, obj) 在编号 index 位置前插入 obj
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
week.insert(0, 'Sunday')
print(week)  
# ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
3)从列表中获取元素
  • 跟数组一样,我们可以通过元素的索引值,从列表获取单个元素,注意,列表索引值是从0开始的。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[0])  # Monday
4)从列表中删除元素
  • remove(obj) 移除列表中某个值的第一个匹配项
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
week.remove('Monday')
print(week)  # ['Tuesday', 'Wednesday', 'Thursday', 'Friday']
  • pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
day = week.pop()
print(day)  # Friday
day = week.pop(0)
print(day)  # Monday
day = week.pop(-2)
print(day)  # Wednesday
  • removepop 都可以删除元素,前者是指定具体要删除的元素,后者是指定一个编号位置。
  • del var1[, var2 ……]语句:删除单个或多个对象
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
del week[0], week[1]
print(week)  # ['Tuesday', 'Thursday', 'Friday']
5)列表的分片

切片的通常写法是start : stop : step

  • 情况 1 - “start :” :以 step 为 1 (默认) 从编号 start 往列表尾部切片。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[3:])  # ['Thursday', 'Friday']
print(week[-3:])  # ['Wednesday', 'Thursday', 'Friday']
  • 情况 2 - “: stop” :以 step 为 1 (默认) 从列表头部往编号 stop 切片。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:3])  # ['Monday', 'Tuesday', 'Wednesday']
print(week[:-3])  # ['Monday', 'Tuesday']
  • 情况 3 - “start : stop”:以 step 为 1 (默认) 从编号 start 往编号 stop 切片。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:3])  # ['Tuesday', 'Wednesday']
print(week[-3:-1])  # ['Wednesday', 'Thursday']
  • 情况 4 - “start : stop : step”:以具体的 step 从编号 start 往编号 stop 切片。注意最后把 step 设为 -1,相当于将列表反向排列。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:4:2])  
# ['Tuesday', 'Thursday']

print(week[:4:2])  
# ['Monday', 'Wednesday']

print(week[1::2])  
# ['Tuesday', 'Thursday']

print(week[::-1])  
# ['Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday']
6)拷贝
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:])  
# week的拷贝 ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

list1 = [123, 456, 789, 213]
list2 = list1
list3 = list1[:]
print(list2)  # [123, 456, 789, 213]
print(list3)  # [123, 456, 789, 213]
list1.sort()
print(list2)  # [123, 213, 456, 789] 
print(list3)  # [123, 456, 789, 213]
7)列表常用的几个操作符
  • 比较操作符<,>
    逻辑操作符
    连接操作符 +
    重复操作符 *
    成员关系操作符 innot in
  • 列表拼接也有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。
list1 = [123, 456]
list2 = [234, 123]
print(list1 > list2)  # False

list3 = [123, 456]
print((list1 < list2) and (list1 == list3))  # True

list4 = list1 + list2  # extend()
print(list4)  # [123, 456, 234, 123]

list5 = list3 * 3
print(list5)  # [123, 456, 123, 456, 123, 456]

list3 *= 3
print(list3)  # [123, 456, 123, 456, 123, 456]

print(123 in list3)  # True
print(456 not in list3)  # False
  • 前面三种方法(append, extend, insert)可对列表增加元素,它们没有返回值,是直接修改了原数据对象。

  • 将两个list相加,需要创建新的 list 对象,从而需要消耗额外的内存,特别是当 list 较大时,尽量不要使用 “+”来添加list。

8)列表的其他语句方法
  • count(obj)方法:统计某个元素在列表中出现的次数
list1 = [123, 456] * 3
print(list1)  # [123, 456, 123, 456, 123, 456]
num = list1.count(123)
print(num)  # 3
  • index(obj[, start[, end]])方法:从列表中找出某个值第一个匹配项的索引位置
list1 = [123, 456] * 5
print(list1.index(123))  # 0
print(list1.index(123, 1))  # 2
print(list1.index(123, 3, 7))  # 4
  • reverse()方法:反向打印出列表中元素
list1 = [123, 456, 789]
list1.reverse()
print(list1)  # [789, 456, 123]
  • sort(key=None, reverse=False)方法:对原列表进行排序(可从大到小,也可以从小到大)
list1 = [123, 456, 789, 213]
list1.sort()
print(list1)  # [123, 213, 456, 789]

list1.sort(reverse=True)
print(list1)  # [789, 456, 213, 123]

二、元组

1)创建元组
  • Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"   #  不需要括号也可以
type(tup3)
<class 'tuple'>
  • 创建空元组
tup1 = ()
  • 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:
tup1 = (50)
type(tup1)     # 不加逗号,类型为整型
<class 'int'>
 
tup1 = (50,)
type(tup1)     # 加上逗号,类型为元组
<class 'tuple'>
  • 元组与字符串类似,下标索引从0开始,可以进行截取,组合等。
2)访问元组
  • 元组可以使用下标索引来访问元组中的值,如下实例:
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
 
print ("tup1[0]: ", tup1[0])      # tup1[0]:  Google
print ("tup2[1:5]: ", tup2[1:5])  # tup2[1:5]:  (2, 3, 4, 5)
3)修改元组
  • 元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:
tup1 = (12, 34.56);
tup2 = ('abc', 'xyz')
 
# 以下修改元组元素操作是非法的。
# tup1[0] = 100
 
# 创建一个新的元组
tup3 = tup1 + tup2;
print (tup3)     # (12, 34.56, 'abc', 'xyz')
  • 元组有不可更改 (immutable) 的性质,因此不能直接给元组的元素赋值,但是只要元组中的元素可更改 (mutable),那么我们可以直接更改其元素,注意这跟赋值其元素不同。例如:
week = ('Monday', 'Tuesday', 'Thursday', 'Friday')
week = week[:2] + ('Wednesday',) + week[2:]
print(week)  # ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')


t1 = (1, 2, 3, [4, 5, 6])
print(t1)  # (1, 2, 3, [4, 5, 6])
t1[3][0] = 9
print(t1)  # (1, 2, 3, [9, 5, 6])
4)元组的相关操作符
  • 比较操作符
    逻辑操作符
    连接操作符 +
    重复操作符 *
    成员关系操作符 innot in
  • 元组拼接 (concatenate) 有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。
t1 = (2, 3, 4, 5)
t2 = ('abc', 'def')
t3 = t1 + t2
print(t3)  # (2, 3, 4, 5, 'abc', 'def')

t4 = t2 * 2
print(t4)  # ('abc', 'def', 'abc', 'def')
5)内置方法
  • 元组大小和内容都不可更改,因此只有 countindex 两种方法。
t = (1, 10.31, 'python')
print(t.count('python'))  # 1
print(t.index(10.31))  # 1
  • count('python') 是记录在元组 t 中该元素出现几次,显然是 1 次
  • index(10.31) 是找到该元素在元组 t 的索引,显然是 1
6)解压元组
  • 解压(unpack)一维元组(有几个元素左边括号定义几个变量)
t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)
# 1 10.31 python
  • 解压二维元组(按照元组里的元组结构来定义变量)
t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)
# 1 10.31 OK python
  • 如果你只想要元组其中几个元素,用通配符「*」,英文叫 wildcard,在计算机语言中代表一个或多个元素。下例就是把多个元素丢给了 rest 变量。
t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c)  # 1 2 5
print(rest)  # [3, 4]
  • 如果你根本不在乎 rest 变量,那么就用通配符「*」加上下划线「_」,例子如下:
a, b, *_ = t
print(a, b)  # 1 2

备注:

学习参考资料:
https://www.runoob.com/python3/python3-tuple.html
https://mp.weixin.qq.com/s?__biz=MzIyNDA1NjA1NQ==&mid=2651011429&idx=1&sn=2d725357f41f54e188cddef2193b51e3&chksm=f3e35efdc494d7ebedb00b54ee693a06419b96981c474fda025874c50f4040b5f1754f5d4683&scene=7&key=e6db03dae12febb94700c8e9ce4bf2c38bb7c71f6accce3a53a3cd3db6b808796ad03b2df943d9924c1bc64ebf976358de3a20164ad87a93f46d452a2760e50203177a9c93d381480040556d6b56688f&ascene=0&uin=MTgxNzI3MTY0MQ%3D%3D&devicetype=Windows+10&version=62060841&lang=zh_CN&pass_ticket=0Rkfds8xykgNZw2cv%2BdFEr%2Bn1uQvlsJjl2ocS0xdPN76EOFmC7S2g6thzJ9gTyqd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值