一、列表的可变性
在字符串中,不能直接去替换字符串中指定索引的值,需要使用切片和连接符。例如把s[2]替换成“f”
s="abcde"
s=s[:2]+"f"+s[3:]
这是字符串的不可变性。
但列表是具有可变性的。
可以直接通过改变指定索引值的元素得到新的列表。
例如:
从以上案例可以总结出:
(1)可以直接通过“列表名[索引值]=新值”修改特定的单个元素。
(2)可以修改通过切片修改多个值,但“=”右边必须是一个可迭代的对象,例如字符串,或者列表等。
但不能是数字。
(3)每个操作都改变了列表的值,每次修改后都是不可逆的,索引对列表进行操作时要考虑清楚。
二、列表方法
方法 | 描述 |
---|---|
append() | 在列表的末尾添加一个元素 |
clear() | 删除列表中的所有元素 |
copy() | 返回列表的副本 |
count() | 返回具有指定值的元素数量。 |
extend() | 将列表元素(或任何可迭代的元素)添加到当前列表的末尾 |
index() | 返回具有指定值的第一个元素的索引 |
insert() | 在指定位置添加元素 |
pop() | 删除指定位置的元素 |
remove() | 删除具有指定值的项目 |
reverse() | 颠倒列表的顺序 |
sort() | 对列表进行排序 |
1、不修改列表的方法
(1)复制列表
新列表=列表.copy()
使用此方法复制列表后得到一个新的列表。对新列表进行操作不影响原列表
(2)统计x出现的次数
count(x)返回列表中x出现的次数,如果没有出现过,返回0
(3)获取x出现的第一个索引值
index(x)返回列表中与x值相等的第一个元素的索引,如果找不到,会报错。可以结合in先判断是否出现过。
2、修改列表的方法
(1)添加
- 列表名.append(x)
将x添加到列表的末尾,列表长度加1 - 列表名.insert(i,x)
将x添加到索引值为i的位置。其他元素往后移一个位置。 - 列表名.extend(C)
将一个集合添加到列表的末尾,从而扩展列表。可用于添加多个值,把要添加的多个值放在集合中。
- 连接符(不是方法,是运算符)
直接用连接符也可以把一个列表添加到另一个列表后面。
(2)删除
-
列表名.pop(i)
删除索引值为i的元素并返回该元素的值。
如果i省略,pop()默认删除列表最后一个元素。 -
列表名.remove(x)
删除列表中第一个值为x的元素,如果列表中不存在x,会保存。使用时可以先用in检测是否存在该元素。 -
del 列表名[i]
删除索引值为i的元素。 -
列表名.clear()
清空列表中的所有元素。
(3)列表排序
列表名.sort()
对列表进行排序,默认是升序排序。只能对列表进行排序。
也可以通过list.sort(reverse=True|False, key=myFunc)来决定排序的规则
参数 | 描述 |
---|---|
reverse | 可选。reverse=True 将对列表进行降序排序。默认是 reverse=False。 |
key | 可选。指定排序标准的函数。 |
可见sort()是直接对列表进行操作。操作后原列表发生改变
sorted(列表名)
**这个 不是方法,是一个函数。**也是对列表进行排序,但它会返回排好序的列表,不改变原列表。
(4)颠倒列表
列表名.reverse()
把列表的元素颠倒了一下,和排序无关。
三、练习
回答程序例子后的问题
strLst =[‘hi’,‘mom’ ‘dad’]
numLst =[1,57,15]
numLst[-1]=25
print (strLst +numLst) #Line 1
print( [strLst[0],numLst[-1]]) #Line 2
print(strLst.append(numLst)) #Line 3
print(strLst) #Line 4
print(numLst.sort()) #Line 5
print(numLst) #Line 6
print(numLst.extend([127,256])) #Line 7
print (numtst) #Line 8
print(numst.pop()) #Line 9
print(numLst)
(a)当程序执行后,标号为1的行输出什么?
(b)当程序执行后,标号为2的行输出什么?
( c)当程序执行后,标号为3的行输出什么?
(d)当程序执行后,标号为4的行输出什么?
(e)当程序执行后,标号为5的行输出什么?
(f)当程序执行后,标号为6的行输出什么?
(g)当程序执行后,标号为7的行输出什么?
(h)当程序执行后,标号为8的行输出什么?
(i)当程序执行后,标号为9的行输出什么?
(j)当程序执行后,标号为10的行输出什么?
(a)['hi', 'momdad', 1, 57, 25]
(b)['hi', 25]
(c)None
(d)['hi', 'momdad', [1, 57, 25]]
(e)None
(f)[1, 25, 57]
(g)None
(h)[1, 25, 57, 127, 256]
(i)256
(j)[1, 25, 57, 127]
四、range、split和多重赋值
range和split这两个函数都会返回一个列表。
(1)当字符串调用split()时,需要提供参数。会把字符串根据参数分割成多个值,得到一个元素列表。
当没有参数时,默认是根据空格分隔。
list1=“a,b,d,e,f”.split(“,”)
得到[“a”,“b”,“c”,“d”,“e”,“f”]
list2=“hello world”.split()
得到[“hello”,“world”]
(2)当调用range()函数时,会创建一个参数范围内的整数列表。
range(-5,5) 得到[-5,-4,-3,-2,-1,0,1,2,3,4]
(3)利用列表进行多重赋值
前提:直到列表中元素的数量
a,b,c=[“a”,“b”,“c”]
左边的变量个数一定要和右边列表中元素个数相同,否则会出错。
五、使用join在列表和字符串之间转换
“x”.join(序列)
将序列中的元素以指定的字符x连接生成一个新的字符串。
列表是序列类型,索引列表可以使用join()
这个例子中是将列表中的元素以空格来连接,得到一个字符串。