python基础之列表List详解

文章目录

List是可变数据类型

使用list()函数可以将可迭代对象转换为列表

List的切片

List的For循环

List的copy功能

List的列表推导式

List是python中的列表,是有序的数据组合,使用中括号[]表示。

列表的数据可以是数字、字符串、字典、元组等,还可以创建嵌套列表;list中的每一项元素,用英文半角的逗号(,)分割。

所有序列能用到的标准操作方法,列表也都可以使用,比如切片、索引等,python的list是可变数据类型,它支持添加 append、插入 insert、修改、删除del等操作。

List是可变数据类型

#第1步:定义一个包含数字的列表
>>>number_listA = [1,2,3]
#查看列表的内存地址
>>>print(id(number_listA))
2114998456840

#第2步:将变量赋值给另一个变量
>>>number_listB = number_listA

#第3步:在列表B最后位置追加数字
>>>number_listB.append(4)
#打印列表B
>>>print(number_listB)
[1, 2, 3, 4]

#第4步:查看列表B的内存地址
>>>print(id(number_listB))
2836824805896

#两次打印的内存地址是同一个,说明指向同一个列表对象

以上过程如下图所示,帮助理解列表的可变性。

PS:尤其是在使用函数传递列表参数时要注意,若在函数中修改传入的元素,该列表指向的对象会被修改,所以一般为了防止列表在函数引用时被修改,通常可以使用函数copy.deepcopy()深拷贝功能在函数内定义一个新的对象。

使用list()函数可以将可迭代对象转换为列表

# 定一个字符串
>>>session = 'helloworld'

#使用list()函数转为列表
>>>session_list= list(session)

#打印内容
>>>print(session_list)
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']

List的切片

List的元素索引以0开始,最后一个元素可以表示为-1。

如列表 ListA = [1,2,3,4,5],以下表格是元素值和索引的关系表。

元素值

1

2

3

4

5

从前面开始的索引

0

1

2

3

4

从后面开始的索引

-5

-4

-3

-2

-1

#打印第1个元素
>>>print(ListA[0])

#打印最后1个元素
>>>print(ListA[-1])

#打印第2个到第3个元素,元素在切片时冒号后面的切片值不包含
>>>print(ListA[1:3])

#打印最后第3个元素到最后1个
>>>print(ListA[-3:])

#以2为步长打印列表元素
print(ListA[::2]) #所有元素步长为2
print(ListA[0:4:2]) #第1个到第4个,步长为2

List的For循环

  • 循环列表内的元素
ListA = [1,2,3,4,5]
for i in ListA:
    print(i)
#打印结果如下
1
2
3
4
5
  • 使用range()函数循环列表的长度

for i in range(len(ListA)):
    print(ListA[i])
#打印结果如下
1
2
3
4
5
  • 使用enumerate()函数遍历列表同时获取索引和元素
for i,data in enumerate(ListA):
    print(f'索引: {i} 元素 : {data}')
#打印结果如下
索引: 0 元素 : 1
索引: 1 元素 : 2
索引: 2 元素 : 3
索引: 3 元素 : 4
索引: 4 元素 : 5

List的copy功能

>>>ListA = [1,2,3,4,5,[1,2,3]]
>>>print(f'列表ListA 内存地址 : {id(ListA)}')
>>>print(f'列表ListA的最后1个列表元素 内存地址 : {id(ListA[-1])}')

#使用list.copy()函数复制列表给另一个变量
>>>ListB = ListA.copy()
>>>print(f'列表ListB 内存地址 : {id(ListB)}')
>>>print(f'列表ListB的最后1个列表元素 内存地址 : {id(ListB[-1])}')

#结果如下:ListA和ListB的内存地址不同,但是列表内最后一个元素的内存地址还是一样,表示虽然用了copy功能,但是只是最外层的列表对象复制为另一个对象,但是列表内的嵌套列表指向的还是同一个对象。
列表ListA 内存地址 : 2492035908616
列表ListA的最后1个列表元素 内存地址 : 2492034601992
列表ListB 内存地址 : 2492036002184
列表ListB的最后1个列表元素 内存地址 : 2492034601992

ListA和ListB的内存地址不同,但是列表内最后一个元素的内存地址相同,表示虽然用了copy功能,但只是最外层的列表对象复制为另一个对象,列表内的嵌套列表指向的还是同一个对象。

如果想全部复制列表的所有元素的对象,可以使用copy.deepcopy()深拷贝功能

import copy
ListC = copy.deepcopy(ListA)
print(f'列表ListC 内存地址 : {id(ListB)}')
print(f'列表ListC的最后1个列表元素 内存地址 : {id(ListB[-1])}')

#结果如下: 嵌套列表元素指向的对象也不相同
列表ListC 内存地址 : 2502494208648
列表ListC的最后1个列表元素 内存地址 : 2502494097160

List的列表推导式

语法: [表达式 for 变量 in 列表],表示把得到的每一个变量值都放到 for 前面的表达式中计算 ,然后生成一个列表。

举例:获取步长为2的列表元素放入一个新的列表

>>>ListA = [1,2,3,4,5,6,7,8,9,10]
#使用for循环
>>>ListB = []
for i in ListA[::2]:
		ListB.append(i)

使用列表推导式,代码变的很简单美观。

>>>ListB = [i for i in ListA[::2]]

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

---祝愿大家都能够龙腾虎跃,步步高升!!!

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值