列表的创建和访问笔记

一、列表的创建

1.创建一维列表


# 创建列表方式一:使用[]
lst = ['hello', 'world', 98, 'hello']

# 创建列表方式二:使用内置函数list()
# lst2 = list(['hello', 'world', 98])
print(id(lst))
print(type(lst))
print(lst)
# 方式三:利用`range()`函数创建列表,生成有规律的列表
#【例子】
x = list(range(10))  # 设置start、stop、和step
print(x, type(x))
lst = list(range(1, 10))
print(lst)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
x = list(range(1, 11, 2))
print(x, type(x))
# [1, 3, 5, 7, 9] <class 'list'>
x = list(range(10, 1, -2))
print(x, type(x))
# [10, 8, 6, 4, 2] <class 'list'>
# 方式四:列表生成式:生成有规律的列表
# 生成1,2,3,4,5,6,7,8,9
lst = [i for i in range(1, 10)]
print(lst)
# 等价于
lst = []
for i in range(1,10):
    lst.append(i)

# 生成2,4,6,8,10
lst = [i*2 for i in range(1, 6)]    # 注意范围左开右闭
print(lst)
lst = [i for i in range(2, 11, 2)]  # 步长为2,可修改表达式即2*i for i in range(2,11)
print(lst)
# 生成4,9,16,25,36,49
lst = [i*i for i in range(2, 8)]
print(lst)

x = [0 for i in range(5)]    # 表达式为常量
print(x, type(x))
# [0, 0, 0, 0, 0] <class 'list'>

# 带有条件判断
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x, type(x))
# [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99] <class 'list'>

# 方式五:*操作符
x = [0] * 5
print(x, type(x))
# [0, 0, 0, 0, 0] <class 'list'>

2.创建多维列表

# 定义一个存储信息的二维列表
# a = ['张海', 90, 80, 70]    # 3门课程(语文,数学,英语)的成绩
# b = ['李晶晶', 98, 88, 77]
# c = ['黄晓洁', 99, 89, 77]
# score = [a, b, c]
# print(score)

score = [['张海', 90, 80, 70], ['李晶晶', 98, 88, 77], ['黄晓洁', 99, 89, 77]]
print(score)
print(score[0][2])
# 创建一个 4×3的二维数
# 列表生成式
x = [[0 for col in range(3)] for row in range(4)]
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

x = [[0] * 3 for row in range(4)]
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

# 乘法操作符
x = [[0] * 3] * 4   # [0]*3相当于[0 for i in range(3)];
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>
注意:
由于list的元素可以是任何对象,因此列表中所保存的是对象的指针。即使保存一个简单的`[1,2,3]`,也有3个指针和3个整数对象。
`x = [a] * 4`操作中,只是创建4个指向list的引用,所以一旦`a`改变,`x`中4个`a`也会随之改变。
# 创建一个 4×3的二维数
x = [[0 for col in range(3)] for row in range(4)]
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

# 使用列表生成式,创建四个不同的对象
for i in x:
    print(i, id(i), type(i))
结果如下:
[0, 0, 0] 2170088154560 <class 'list'>
[0, 0, 0] 2170088176256 <class 'list'>
[0, 0, 0] 2170088175680 <class 'list'>
[0, 0, 0] 2170088155776 <class 'list'>

当开始修改列表中的值时,列表中第一个子列表的第一个元素变化

x[0][0] = 1
print(x, type(x))
# [[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>
x = [[0] * 3] * 4   
print(x, type(x))
# [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>

#  使用*操作符,四个子列表都指向同一对象
for i in x:
    print(i, id(i), type(i))
结果如下:
[0, 0, 0] 2170088154560 <class 'list'>
[0, 0, 0] 2170088154560 <class 'list'>
[0, 0, 0] 2170088154560 <class 'list'>
[0, 0, 0] 2170088154560 <class 'list'>


当修改列表中第一个子列表的第一个元素时,分析所有子列表的第一个元素都发生了变化

x[0][0] = 1
print(x, type(x))
# [[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]] <class 'list'>
总结:
*操作符是复制了值的引用,而不是创建新的对象,在下述list里4个元素指向同一个对象的引用
对列表使用*操作符,很方便,但要注意:
对于不可变对象(int、字符串、元组)而言是复制值
对于可变对象(列表、字典)而言是复制引用

因此对于包含可变对象的列表切莫使用乘法,一旦修改里面的值都会改变,可使用列表生成式替代

二、列表的访问

lst = ['hello', 'world', 98, 'hello']

1.获取列表中指定元素的索引     index()方法

print(lst.index('hello'))          # 如果列表中有相同元素只返回列表中相同元素的第一个元素的索引
# print(lst.index('Python'))       # 如果查询的元素不在列表中,则会抛出ValueError
# print(lst.index('hello', 1, 3))  # 还可以在指定的start和stop之间进行查找

2.获取列表中单个元素    list.[index]

0123
helloworld98hello
-4-3-2-1
正向索引从0到N-1,如lst[0],N为元素的个数
负向索引从-N到-1,如lst[-N]
指定索引不存在,抛出IndexError

二维列表list[i][j]

3.获取列表中多个元素   切片--列表名[start:stop:step]

lst2 = [10, 20, 30, 40, 50, 60, 70, 80]
print('原列表', id(lst2))
lst3 = lst2[1:6:1]   # start=1,stop=6,step=1
# lst4 = lst3[1:6]   # 切片:左闭右开
# lst4 = lst3[1:6:]
print('切的片段', id(lst3))   # 切后的片段形成新的id,原列表切片的拷贝
print(lst2[1:6:1])
print(lst2[1:6:2])
print(lst2[::-1])   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值