Python基础05_列表&元组(上)

目录

列表

1、获取列表中的数据---索引

1.正向索引

2.反向索引

3.切片索引

2、更新列表

3、删除列表元素

4、列表操作

1.长度 len()

2.组合

3.重复

4.元素是否存在于列表中

5.嵌套列表

6.列表常用API

操作列表的函数

列表的方法

元组(上)

1、创建元组

2、访问元组

3、修改元组

4、删除元组


列表


列表是用方括号 [ ] 标注,逗号分隔的一组值。列表可以包含不同类型的元素,但一般情况下,各个元素的类型相同。
列表是一种复合数据类型(数据容器):

x = [10, 20, 3.6, 1+3j, True, "hello", "你好"]
print(x)  # [10, 20, 3.6, (1+3j), True, 'hello', '你好']

1、获取列表中的数据---索引

索引:与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。

列表的索引(下标,index)不能超出索引范围(越界)。

1.正向索引
# 正向索引
y1 = x[0]
print(y1)  # 10
2.反向索引
print(x[-1])  # 你好

连续访问:

x = [10, 20, 30, 40, 50, 60]
for i in range(len(x)):
    print(x[i])

# 10
# 20
# 30
# 40
# 50
# 60
3.切片索引

使用下标索引来访问列表中的值,同样也可以使用方括号 [ ] 的形式截取字符。

#切片索引
x = [10, 20, 30, 40, 50, 60, 70, 80]
x2 = x[3:5]  # x2表示从x列表中截取一个片段 得到一个新的列表 [3,5) 不包含最后
print("x2:", x2)  # x2: [40, 50]

x3 = x[2:-2]  # 从左往右取数据 从2对应的元素开始取值 一直取到-2对应的元素
print("x3:", x3)  # x3: [30, 40, 50, 60]

x4 = x[-3:4]  # 从左往右取数据 若切片的范围没能取到任何元素 就会得到一个空列表(不会报错)
print("x4:", x4)  # x4: []

x5 = x[1:100]
print("x5:", x5)  # x5: [20, 30, 40, 50, 60, 70, 80]

x6 = x[50:100]
print("x6:", x6)  # x6: []

x7 = x[:4]  # 省略冒号前面的 就表示从x[0]开始
print("x7:", x7)  # x7: [10, 20, 30, 40]

x8 = x[4:]  # 省略冒号后面的 就表示到len(x)结束
print("x8:", x8)  # x8: [50, 60, 70, 80]

x = [10, 20, 30, 40, 50, 60, 70, 80]
x9 = x[1:6:2]  # 步长为2 x[1] x[3] x[5]
print("x9:", x9)  # x9: [20, 40, 60]

x10 = x[::2]
print("x10:", x10)  # x10: [10, 30, 50, 70]

x11 = x[::-1]  # 倒置
print("x11:", x11)  # x11: [80, 70, 60, 50, 40, 30, 20, 10]

x12 = x[1:5:-1]  # 从1取不到5
print("x12:", x12)  # x12: []
# 步长为负数时,一般不设置起始的索引

# 列表反转
print(x[::-1])  # [80, 70, 60, 50, 40, 30, 20, 10]

2、更新列表

对列表的数据项进行修改或更新。

# 列表反转
print(x[::-1])  # [80, 70, 60, 50, 40, 30, 20, 10]

# 更新列表
x = [10, 20, 30, 40, 50]
x[0] = 100  # 通过下标修改列表数据
print(x)  # [100, 20, 30, 40, 50]
print(x[0])  # 100

# 添加元素到列表的末尾
x.append(60)
print(x)  # [100, 20, 30, 40, 50, 60]

# 更新切片 不会修改原列表(深拷贝)
x = [10, 20, 30, 40, 50, 60]
x2 = x[:]
print("x:", x)  # x: [10, 20, 30, 40, 50, 60]
print("x2:", x2)  # x2: [10, 20, 30, 40, 50, 60]
print(id(x), id(x2))  # 2355473587904 2355473588096
x2[0] = 100
print("x2的下标对应的元素被修改后:", x2)  # [100, 40, 50]
print("x的下标对应的元素被修改后:", x)  # [10, 20, 30, 40, 50, 60]

关于浅拷贝、深拷贝

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

x = [10, 20, 30]
x2 = x
print(x)
print(x2)
print(id(x), id(x2))  # 1513955235648 1513955235648

深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

x = [10, 20, 30]
x2 = [x[0], x[1], x[2]]
print(x)
print(x2)
x2[0] = 50
print(x)  #[10, 20, 30]
print(x2)  #[50, 20, 30]

注意:切片得到的是一个新的列表,且切片是取值操作,不能赋值。

# x[2:3] = 100  是错误语句

同时列表的切片的元素是一种浅拷贝过来的元素,切片后,新列表中的元素和原列表中的切片范围的元素 “长得一样”是通过浅拷贝得到的。

x = [10, -20, "hello", True, None, 1000, [10, 20, 30, 40]]


# 列表的切片的元素是一种浅拷贝过来的元素
x3 = x[3:]

x4 = x3[-1]

x4[0] = 99999
print("x:", x)  # x: [10, -20, 'hello', True, None, 1000, [99999, 20, 30, 40]]
print("x3:", x3)  # x3: [True, None, 1000, [99999, 20, 30, 40]]
print("x4:", x4)  # x4: [99999, 20, 30, 40]

3、删除列表元素

可以使用 del 语句来删除列表的的元素。

x = [10, 20, 30, 40, 50]
del x[2]
print(x)  # [10, 20, 40, 50]

4、列表操作

1.长度 len()
2.组合
x = [10, 20, 30, 40, 50]
x2 = x + [60]
print(x2)  # [10, 20, 40, 50, 60]
3.重复
x3 = x*2
print(x3)  # [10, 20, 40, 50, 10, 20, 40, 50]
x3 = x*0
print(x3)  # []
4.元素是否存在于列表中
x = [[10, 20], [20, 30], 90, 100]
x2 = [10, 20]
re = x2 in x  # x2变量中保存的数据 在x中有没有“一样”的元素(数据一样就行不需要一定是同一个元素)
print(re)  # True
x2[0] = 100
print(x2, x)  # [100, 20] [[10, 20], [20, 30], 90, 100]

5.嵌套列表

即在列表里创建其它列表。

# 嵌套列表
x = [1, 2, 3, 4]
x2 = ["a", "b", "c"]
x3 = [x, x2]
print(x3)  # [[1, 2, 3, 4], ['a', 'b', 'c']]
x4 = x3[0]
print(x4)  # [1, 2, 3, 4]
print(x4[3])  # 4
print(x3[0][3])  # 4

6.列表常用API

操作列表的函数
  • len(list) 返回列表元素个数
  • max(list) 返回列表元素最大值
  • min(list) 返回列表元素最小值
x = [10, 20, 30, 40, 50, 100]
print(len(x))  # 6
print(max(x))  # 100
print(min(x))  # 10
  • list(seq)将可迭代数据转化为列表
# list(seq)将可迭代数据转化为列表
re = range(10)
x = list(re)
print(x)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
re = "hello"
x = list(re)
print(x)  # ['h', 'e', 'l', 'l', 'o']
re = (10, 20, 30)
x = list(re)
print(x)  # [10, 20, 30]

常见的官方提供的迭代数据:range、字符串、元组、列表

列表的方法
  • list.append() 在列表末尾添加新的对象。

以一道易错题为例:

# list.append() 在列表末尾添加新的对象
x = [10, 20, 30, 40]
for i in range(len(x)):
   temp = x[i]
   del x[i]
   x.append(temp)
print(x)  # [20, 40, 30, 10]

输出结果是[20, 40, 30, 10]而并非是简单的[40, 30, 20, 10],建议将每一步循环结果列出。

  • list.count() 统计某个元素在列表中出现的次数
# list.count() 统计某个元素在列表中出现的次数
x = [[10, 20], 10, 20, [10, 20]]
n = x.count(10)  # 查看x列表中的每一个元素有几个10
print(n)  # 1
print(x.count([10,20]))  # 2
  • list.extend() 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表
# list.extend() 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
x = [10, 20, 30, 40]
x2 = [10, 1, 2, 3, 3]
x.extend(x2)  # 会直接修改x列表  只能传入可迭代数据(列表、字符串、元组、range)
print(x)  # [10, 20, 30, 40, 10, 1, 2, 3, 3]
x.extend(range(2,9,3))
print(x)  # [10, 20, 30, 40, 10, 1, 2, 3, 3, 2, 5, 8]
  • list.index() 从列表中找出某个值第一个匹配项的索引位置
x = [10, 20, 30, 40]
print(x.index(30))  # 2
  • list.insert(index, obj) 将对象插入列表
x = [10, 20, 30, 40]
x.insert(2, 50)
print(x)  # [10, 20, 50, 30, 40]
x.insert(100, 666)
print(x)  # [10, 20, 50, 30, 40, 666]  # 插入元素到指定位置时,若越界则插入到开头或者末尾

x.insert(len(x), 100)
print(x)  # [10, 20, 50, 30, 40, 666, 100]
  • list.pop(index=-1) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
x = [10, 20, 30]
re = x.pop(0)  # 移除指定的下标对应的元素,并返回这个移除的元素,默认移除最后一个元素
# 移除元素的下标不能越界
print(re)  # 10
print(x)  # [20, 30]
  • list.remove(obj) 移除列表中某个值的第一个匹配项

# list.remove(obj) 移除列表中某个值的第一个匹配项
x = [10, 20, 30, 40, 50]
re = x.remove(10)  # 移除的元素必须在列表中
print(re)  # None
print(x)  # [20, 30, 40, 50]
  • list.clear() 清空列表

# list.clear() 清空列表
x = [10, 20, 30]
x.clear()
print(x)  # []
  • list.copy() 复制列表

x = [10, 20, 30]
x2 = x.copy()
print("x:", x)  # x: [10, 20, 30]
print("x2:", x2)  # x2: [10, 20, 30]
print(x is x2)  # False
x2[0] = 100
print(x, x2)  # [10, 20, 30] [100, 20, 30]  # 深拷贝

x = [[10, 20, 30], 20, 30]
x2 = x.copy()
x2[0][0] = 50  # 注意区别
print(x, x2)  # [[50, 20, 30], 20, 30] [[50, 20, 30], 20, 30]
  • list.reverse() 反向列表中元素

# list.reverse() 反向列表中元素
x = [10, 20, 30]
x2 = x[::-1]  # 创建新的变量空间
print(x, x2)  # [10, 20, 30] [30, 20, 10]
x3 = x.reverse()  # 在原有列表上修改
print(x3)  # None
print(x)  # [30, 20, 10]
  • list.sort(key=None,reserve=False) 对原列表进行排序
# list.sort(key=None,reserve=False) 对原列表进行排序
x = [3, 5, 7, 8, 1, 2, 9]
# 按绝对值大小顺序排列
x.sort(key = lambda a:abs(a), reverse=False)
print(x)  # [1, 2, 3, 5, 7, 8, 9]
x.sort(key = lambda a:abs(a), reverse=True)
print(x)  # [9, 8, 7, 5, 3, 2, 1]

例题:在列表里再生成100行、80列的列表(一行80个元素,共100行)

import random
x = []
for j in range(100):
    row = []
    for i in range(80):
        row.append(int(random.random() * 100))
    x.append(row)
print(x)

元组(上)


Python 的元组与列表类似,不同之处在于元组的元素不能修改

元组使用小括号 ( ),列表使用方括号 [ ]。

1、创建元组

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

# 元组(tuple)

x = (1, 2, 3)
print(x)  # (1, 2, 3)

 也可以不使用括号:

# 不使用括号
x = "a", "b", "c", "d"
print(x)  # ('a', 'b', 'c', 'd')

元组中只包含一个元素时,需要在元素后面添加逗号 ,否则括号会被当作运算符使用:

# 元组 只包含一个元素时
# 需要在元素后面添加逗号
x = (10,)
print(x)  # (10,)

x = 20,
print(x)  # (20,)

a = 100
x = a,
print(x)  # (100,)

# 这种括号不是元组的圆括号,它是括号运算符
x = (10)
print(x)  # 10

2、访问元组

元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等。

# 访问元组
x = (10, 20, "hello", True, 3.14, -7.8)
print(x[0])  # 10
print(x[1:3])  # (20, 'hello')
print(x[2:])  # ('hello', True, 3.14, -7.8)
print(x[:4])  # (10, 20, 'hello', True)

3、修改元组

元组中的元素值是不允许修改的,但可以对元组进行连接组合

# 修改元组
x = 10, 20, 30
print(x[-1:])  # (30,)

x = (10, 20, "hello")
a, b, c = x  # a = x[0]  b = x[1]  c = x[2]
print(a, b, c)  # 10 20 hello

x = 10, 20
x2 =30, 40
x3 = x + x2
print(x3)  # (10, 20, 30, 40)

4、删除元组

元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组

# 删除元组
x = (10, 20, "hello", True, 3.14, -7.8)
print(x)  # (10, 20, 'hello', True, 3.14, -7.8)
del x
print(x)  # NameError: name 'x' is not defined

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值