python之列表

目录

列表的基本使用

添加列表元素

删除列表元素

列表的查询

列表元素的修改

交换两个变量

​列表元素的排序

列表数据的反转

python里的可变数据类型和不可变数据类型

列表的浅复制(浅拷贝)

列表的嵌套

使用列表推导式简单创建一个列表

浅拷贝和深拷贝



列表的基本使用

# 可以使用[] 来表示一个列表,列表里的每一个数据我们称之为元素
names = ['张三', '李四', '王五']
print(names)

# 可以使用  list(可迭代对象) 将可迭代对象转换成一个列表
names2 = list(('22', '33'))
print(names2)

 

添加列表元素

  • 使用append()方法,在列表末尾添加一个元素
names = ['张三', '李四', '王五']
names.append('索顿')
print(names)

  • 使用insert(index, object),index表示下标,在那个位置插入数据。object表示对象,为插入的数据
names = ['张三', '李四', '王五']
names.insert(1, '索顿')
print(names)

 

  • 使用extend(iterable), iterable为可迭代对象。A.extend(B) 将 B 添加到 A的末尾
names = ['张三', '李四', '王五']
name = ['索顿', '阿托']
names.extend(name)
print(names)

 

 

删除列表元素

  • pop(index)方法,如果不指定index则默认删除最后一个元素
names = ['张三', '李四', '王五', '索顿']
names.pop()
print(names)

names.pop(1)
print(names)

  • remove(object),用来删除指定的元素(如果有重复,只会删掉最先出现的元素).如果删除的元素不存在,会出现ValueError
names = ['张三', '李四', '王五', '索顿']
names.remove('王五')
print(names)

  • clear(),清空列表
names = ['张三', '李四', '王五', '索顿']
names.clear()
print(names)

 

列表的查询

  • index()方法,如果查找成功,返回元素的下标,如果查找失败,会出现ValueError
names = ['张三', '李四', '王五', '索顿']

print(names.index('王五'))

  • count(),返回所查元素在列表中出现的个数
names = ['张三', '李四', '王五', '索顿', '张三']

print(names.count('张三'))
print(names.count('莫甘娜'))

 

列表元素的修改

  • 使用下标可以直接修改列表里的元素
names = ['张三', '李四', '王五', '索顿', '张三']
names[0] = '莫甘娜'
print(names)

 

交换两个变量

  • 使用第三方变量
a = 12
b = 23

c = a
a = b
b = c
print('a= %d  b= %d' % (a, b))

  • 使用运算符来实现,注意:此方法只适用于 数字
a = 12
b = 23

a = a + b
b = a - b
a = a - b
print('a= %d  b= %d' % (a, b))

  • 使用异或运算符(异或:两个位相同为0,相异为1 )

a = 12
b = 23

# 注意: a^b^b = a
a = a ^ b
b = a ^ b
a = a ^ b
print('a= %d  b= %d' % (a, b))







 

  • 使用python特有的 ,a, b = b, a
a = 12
b = 23
a, b = b, a
print('a= %d  b= %d' % (a, b))





列表元素的排序

  • sort(),默认为从小到大排序,如果需从大到小排序,需指定参数:reverse=True
list = [4, 0, 9, 1, 12]
list.sort()
print(list)

list.sort(reverse=True)
print(list)

  • 使用内置函数sorted()。该函数不会改变原有的数据,而是重新生成一个有序的数据

list1 = [4, 0, 9, 1, 12]
list1 = sorted(list1)
print(list1)

list1 = sorted(list1, reverse=True)
print(list1)





 

列表数据的反转

  • 使用reverse()方法
list1 = [4, 0, 9, 1, 12]
list1.reverse()
print(list1)

  • 使用切片的方法,list1[::-1]
list1 = [4, 0, 9, 1, 12]
list1 = list1[::-1]
print(list1)

 

python里的可变数据类型和不可变数据类型

不可变数据类型:字符串、数字、元组

可变数据类型: 列表、字典、集合

不可变数据类型:如果修改变量的值,会给变量重新分配一块内存地址(使用内置函数 id(Object), 可获取一个变量的内存地址)

可变数据类型: 如果修改变量的值,不会给变量重新分配一块内存地址,还是使用原来的地址

  • 不可变数据内型

实例:

a = 10
print("修改前的内存地址:%X" % id(a))
a = 12
print("修改后的内存地址:%X" % id(a))

分析:

  • 可变数据类型

实例:

a = [100, 200, 300]
print("修改前的内存地址:%X" % id(a))
a[1] = 250
print("修改后的内存地址:%X" % id(a))

分析:

 

列表的浅复制(浅拷贝)

  • 使用copy()方法

调用copy()方法可以复制一个列表。这个新列表的内容和原列表的内容一样,但是指向不同的内存空间

a = [100, 200, 300]
b = a.copy()
print('a = ', a, '\t', 'b = ', b)
print("a的内存地址:%X   b的内存地址:%X" % (id(a), id(b)))

  • 使用copy模块的copy()方法
import copy 

a = [100, 200, 300]
b = copy.copy(a)
print('a = ', a, '\t', 'b = ', b)
print("a的内存地址:%X   b的内存地址:%X" % (id(a), id(b)))

  • 使用切片方法。切片其实就是一个浅拷贝
a = [100, 200, 300]
b = a[::]
print('a = ', a, '\t', 'b = ', b)
print("a的内存地址:%X   b的内存地址:%X" % (id(a), id(b)))

 

列表的嵌套

import random

# 一个学校有三个办公室,用程序完成10名老师的随机分配

teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']

rooms = [[], [], []]

for teacher in teachers:
    room = random.choice(rooms)
    room.append(teacher)

print(rooms)

# 获取每个办公室老师的数目


for i, room in enumerate(rooms):  # enumerate是带下标的遍历
    print('房间%d 有%d名老师' % (i, len(room)))

使用列表推导式简单创建一个列表

nums = [i for i in range(10)]
# 相当于
# nums = []
# for i in range(10):
#     nums.append(i)
print(nums)

nums2 = [j for j in range(10) if j % 2 == 0]
# 相当于
# nums2 = []
# for j in range(10):
#     if j % 2 == 0:
#         nums2.append(j)
print(nums2)

 

浅拷贝和深拷贝

前面所讲的,列表.copy(),  copy.copy(列表), 切片都属于浅拷贝。但是如果一个列表里面嵌套有列表,浅拷贝值会复制第一层的列表,对于嵌套的列表并不会复制,它还是存在一个内存空间里

eg:

nums = [1, 2, [3, 4], 5]

nums2 = nums.copy()

# 修改nums嵌套列表的元素值
nums[2][0] = 6
# 修改nums[2][0] 的值,nums2[2][0] 里面的值同样会改变
print('nums2: ', nums2)

由此就需要用深拷贝,深拷贝会拷贝全部

注意:深拷贝只能使用copy模块

import copy

nums = [1, 2, [3, 4], 5]

nums2 = copy.deepcopy(nums)

# 修改nums嵌套列表的元素值
nums[2][0] = 6
# 深拷贝修改nums[2][0] 的值,nums2[2][0] 里面的值不会改变
print('nums: ', nums)
print('nums2: ', nums2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值