python学习04 基本数据类型之列表类型

一、列表数据类型

1.1 列表的定义

概念:python中列表用来表示有序可变的元素的集合,元素可以是任意数据类型。
列表可以理解为一个盒子,什么东西都可以往里面放。列表是python数据类型里面最灵活的数据类型。
定义:由一对中括号进行定义,元素与元素之间用逗号隔开。

a = []                      # 空列表
b = ["a", "b", "cde"]       # 字符串列表项
c = [1, "b", "c"]           # 数字列表项    
d = [1, "b", []]            # 列表列表项  一个列表里面可以有空列表,里面还可以放元素。
e = [1, "b", [2, "c"][]]      # 嵌套列表 列表里面还有列表


print('a的类型为:', type(a))    # a的类型为: <class 'list'>
print('b的类型为:', type(b))    # b的类型为: <class 'list'>
print('c的类型为:', type(c))    # c的类型为: <class 'list'>
print('d的类型为:', type(d))    # d的类型为: <class 'list'>
print('e的类型为:', type(e))    # e的类型为: <class 'list'>
  #  结果都为 <class 'list'>

Python中使用 list 表示列表

小技巧:当我们在pycharm中想要同时修改多个字符的时候,可以按住Alt键,然后多次选中后,松开Alt键 -输入替换的内容 pychram会帮你一次性替换全部内容。

1.2 列表的拼接

像字符串一样,列表之间可以进行加法运算实现列表的拼接,
列表也可以和整数进行乘法运算实现列表的重复

l1 = [1, 2, 3]
l2 = ['a', 'b', 'c']
print(l1+l2)   #  [1, 2, 3, 'a', 'b', 'c']   加法运算  首尾相连  
print(l2+l1)   #  ['a', 'b', 'c', 1, 2, 3]   两个相加的因子本身不会发生改变,只是会生成一个新的列表。	
print(l1*3)   #  [1, 2, 3, 1, 2, 3, 1, 2, 3]

1.3列表的索引和切片

序列的索引和切片操作完全一致,参见字符串。
列表的索引

ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(ls[0])     # 1
print(ls[-1])    # 9
print(ls[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1]

列表切片切出来的元素会形成一个新的列表
需要特别注意的是列表的嵌套取值

# 嵌套取值
ls = [1, 2, ['a', 'b', ['c', 'd']]]
# 要取 d 怎么取 ?
print(ls2[2])       # ['a', 'b', ['c', 'd']]
print(ls2[2][2])    #  ['c', 'd']
print(ls2[2][2][1])  #  d

ls3 = [1,2,['a','b']]
要取到'a'应该怎么取
print(ls3[2][0])  # ‘a'

在这里插入图片描述
例题:
在这里插入图片描述

疑问:为什么索引出来是整数,切片出来是列表 ?
索引是获取元素,索引的时候列表对应位置是什么元素就获取什么元素 它自己是什么数据类型索引出来就是什么数据类型。
而切片是从列表里面获取对应的元素,然后把它组成一个新的列表。

1.4 列表的常用操作

python中的列表操作非常灵活,是非常重要和经常使用的数据类型。
列表是一种容器,里面可以放任何数据类型,列表可以增 删 改

1.4.1 增
一个一个地加
.append(ele)

在调用这个方法的列表的末尾添加一个元素,(追加)

ls= [1, 2, 3]
res =ls.append(4)  #  append 本身不会有返回值  只会改变他原来的列表
print(res)   # None 
print(ls)    # [1, 2, 3, 4]

lr = [1, 2, 3, 4]
lr.append([4,5])
print(lr)    # [1, 2, 3, 4, [4, 5]]
print(ls[-1][-1]  #  5
# 用append方法往列表中加入一个子列表时,会把加入的列表看作列表中的一个元素。

注意:
①、.append本身没有返回值,只会改变它原来的列表。
②、用append 往列表中加入一个子列表时,会把加入的子列表看作一个整体传入原列表。

.insert(index,ele)

在列表的指定索引的元素的前面插入一个元素
index 是索引,element是元素。

ls = [1, 2, 3]
ls.insert(0,0)
print(ls)        # [0, 1, 2, 3]
ls.insert(1,0)
print(ls)       #  [0, 0, 1, 2, 3] 

ls = [1, 2, 3]
a = 'a'
ls.insert(1,a) 
print(ls)   #  [1, 'a', 2, 3]   里面也可以放变量 

ls = [1, 2, 3, 4, 5, 6, 7]
ls.insert(4, 0)   
print(ls)   #  [1, 2, 3, 4, 0, 5, 6, 7]

ls = [1, 2, 3, 4, 5, 6, 7]
ls.insert(-3, 0)
print(ls)   #  [1, 2, 3, 4, 0, 5, 6, 7]

ls3 = [1, 2, 3, 4, 5, 6, 7]
ls3.insert(4, [8, 9])
print(ls3)  #  [1, 2, 3, 4, [8, 9], 5, 6, 7]

注意:
①、insert方法:将元素插入指定位置的前面,原来该位置的元素会往右继续顺延,可以想象成插队。
②、insert没有返回值,它只会改变原列表。
③、insert不能插到最后,想插到最后只能使用append

一次加多个
.extend(iterable)

iterable:可迭代对象(比如列表,字符串等),
扩展列表,元素为传入的可迭代对象中的元素

ls1 = [1, 2, 3]
ls2 = [4, 5, 6]
ls1.extend(ls2) #  把 ls2中的值扩展到 ls1中
print(ls1)     #  [1, 2, 3, 4, 5, 6]

ls2.extend('abcde')
print(ls2)    #  [4, 5, 6, 'a', 'b', 'c', 'd', 'e']

ls3 = [1, 2, 3, 4, 5, 6, 7]
ls3.extend([8, 9])
print(ls3)  [1, 2, 3, 4, 5, 6, 7, 8, 9]

ls4 = [1, 2, 3, 4, 5, 6, 7]
ls4.extend([[8, 9]])
print(ls4)  # [1, 2, 3, 4, 5, 6, 7, [8, 9]]

ls5 =[1, 2, 3, 4, 5, 6, 7]
ls5.extend('clever')  
print(ls)  #  [1, 2, 3, 4, 5, 6, 7, 'c', 'l', 'e', 'v', 'e', 'r']

注意
①:当用extend向列表中加入一个列表时候,会把列表脱掉把里面的元素分别放入加入的列表,但是注意它只会脱掉一层。

思考:ls1 + ls2的结果跟ls1.extend(ls2)的结果一样,它们的区别在哪?
ls1.extend(ls2):指的是把 ls1 当作主语,将ls2里面的值拓展到ls1中,是改变原来的列表。
但ls1 +ls2的意思是用ls1 和ls2的相加后形成一个新的列表,是获得一个新的列表。

1.4.2 删
删除一个指定索引元素
.pop(index = -1)

删除指定索引的元素,并返回该元素,如果不指定索引默认删除最后一个元素。

ls = [1, 2, 3]
res = ls.pop()
print(res)    # 3 
print(ls)     # [1, 2]
ls = [1, 2, 3]
res = ls.pop(0)
print(res)   #  1
print(ls)    # [2,3]

如果删除一个不存在的索引位置的元素,会报错。
注意: pop方法有返回值

删除一个指定元素
.remove(value)

如果给你的列表很大,你不知道里面的顺序,这个时候.pop方法就不好用了。
从列表中删除第一个指定的值value,如果不存在则报错,没有返回值。

ls = ['a', 1, 2, 3, 1]   #  把ls里面的第一个1删除,根据值删除。
res = ls.remove(1)
print(res)       # None
print(ls)       # ['a', 2, 3, 1]
删除多个元素
.clear()

清空列表,原列表变成空列表

ls = [1, 2, 3]
ls.clear()
print(ls)   # []

例题:
在这里插入图片描述

解析:列表的pop方法没有指定索引的时候默认删除索引为-1的值并返回,remove没有返回值。

1.4.3 改

列表中的元素可以进行修改,
只需使用索引赋值即可

  • 想要修改列表中指定索引位置的值,非常简单,通过索引赋值即可
ls = [1, 2, 3]
ls[1] = 'a'
print(ls)     #  [1, 'a', 3]


1.5 列表的其他方法

print(dir([]))   # 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
  • .copy 返回列表的一个浅拷贝,在讲可变与不可变类型的时候再详细讨论。
  • .index(value,start=0,step=很大很大的一个数
    返回列表中value的第一个元素的索引,start,stop是开始和结束的索引,表示的是范围,默认情况下是整个列表,如果value不存在会报错。
ls = [1, 2, 3, 4]
res = ls.index(1)
print(res)       # 0

l2 = [1, 2, 3, 4, 1]
res = ls.index(1, 1)  # 改变了范围,从索引为1的位置开始找第一个元素为1的索引
print(res)      # 4
  • .reverse 翻转列表元素顺序 本身没有返回值
ls = [1, 2, 3, 4, 1]
ls.reverse()
print(ls)    #  [1, 4, 3, 2, 1]
  • sort 排序(key=None,reverse=False),对列表进行排序,默认按照从小到大的顺序,当参数 reverse=True 时,从大到小.,没有返回值。
ls = [1, 3, 7, 5, 11, 9]
ls.sort()
print(ls)  #  [1, 3, 5, 7, 9, 11]
ls = [1, 3, 7, 5, 11, 9]
ls.sort(reverse=True)
print(ls)   # [11, 9, 7, 5, 3, 1]

注意:列表要排序的时候里面的元素一定要是相同数据类型的,要么都是整数,要么都是字符串…不然就会报错。

  • .count(value) 返回value 在列表中出现的次数,如果没有则返回0
ls = [1, 4, 3, 3, 2, 2, 3]
res = ls.count(3)
print(res)   #  3

1.6 列表和字符串的转换

字符串 -> 列表 list(str)

字符串是字符的序列,通过list函数可以将一个字符串转换成单个字符组成的列表(把字符串中的元素依次拿出来作为列表中的元素)
list(iterable) 里面放可迭代对象,然后把里面的值依次拿出来转换成列表。

s = 'abcdefg'
ls = list(s)
print(ls)    # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
列表-> 字符串 join

在列表中的元素都是字符串的情况下
使用 .join(str_iterable) 的方法(这是一个字符串的方法)
意思是用 ''作为连接符,把list里面的元素一一连接起来

str(list) 不可取

ls = ['a', 'b', 'c', 'd', 'e']
res = ''.join(ls) # 用左边作为连接符,把右边括号里面的内容连接起来。
print(res)         #  abcde 
print(type(res))   #  <class 'str'>

‘’.join(ls) 这个操作是我们经常会用到的

str.join(iterable)
返回一个由 iterable 中的字符串数据类型拼接而成的字符串,使用前面的str进行连接。
如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。 调用该方法的字符串将作为元素之间的分隔。
注意: join是字符串方法,括号里面的内容必须是字符串,如果有其他的数据类型就会报错。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值