字符串可以修改吗?
s = “123456789”
字符串是不可变对象,属于序列。可以使用索引访问,索引可以是整数,也可以是负数,支持切片访问等。列表也是Python内建的一种数据结构,属于序列。
一、列表
1、列表定义
1)列表是python的一个内建数据结构
2)可以把列表看做一个容器
3)该容器被隔成不同的空间,每个空间可以放任何类型“物”
4)列表内物体只有前后的位置关系
5)列表每个格子中的“物”是可以替换的
6)列表是一个可变的序列
2、创建列表语法
1)列表定义的语法 []
----列表名 = [列表内容.......]
某些情况下,列表名 和“=”可以省略,列表可以为空列表
2)列表定义举例
---[100,200,300]
--- L=[]
---L=["A","B","F","g"]
---L =[1,"hello",2,"world"]
---L =[1,2,[1,2,3,4,5],"y","i"]
---L =[1,2,(1,2,3),9]
----L =[1,2,3,4,{5,6,"y","i"},8]
----L =[1,2,3,4,{"name":"alex","age":12},8]
3、使用list函数创建列表
1)使用列表(list)函数创建列表
函数 | 说明 |
list() | 生产一个空列表,等同于[] |
list(iterable) | 用可迭代对象初始化一个列表 |
2)示例
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
L = list()
L = list("abc")
s = "suzhou"
P =list(s)
q =list([1,2,3])
print(L)
print(P)
print(q)
"""
['a', 'b', 'c']
['s', 'u', 'z', 'h', 'o', 'u']
[1, 2, 3]
Process finished with exit code 0
"""
4、列表运算
1)+运算
列表链接
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3] +["a","b","c"]
b = [9,10]
c = a+b
print(c)
"""
[1, 2, 3, 'a', 'b', 'c', 9, 10]
Process finished with exit code 0
"""
2)+=运算
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,"a","b","c"]
a+=["alex","rose"]
print(a)
"""
[1, 2, 3, 'a', 'b', 'c', 'alex', 'rose']
Process finished with exit code 0
"""
3) *运算(复制)
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=["alex","rose"]*8
print(a)
"""
['alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose', 'alex', 'rose']
Process finished with exit code 0
"""
4) *=运算
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=["alex","rose"]*8
print(a)
"""
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
Process finished with exit code 0
"""
列表关系运算:返回True或者False
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3]
b=[1,2,3]
c=[4,5,6]
print(a!=b)
print(a==b)
print(a<c)
print(b>c)
"""
False
True
True
False
Process finished with exit code 0
"""
列表 in 和 not in 运算
如果对象在列表中返回True或者False
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3]
b=1
c=8
print(b in a)
print(c not in a)
"""
True
True
Process finished with exit code 0
"""
列表and,or,not 运算
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3]
b=[1]
c=[8]
print(a and b)
print(a or b)
print(not a)
"""
[1]
[1, 2, 3]
False
Process finished with exit code 0
"""
5、列表索引与切片访问
1)l列表索引与切片访问
索引从0开始,列表最后一个成员的索引为列表长度-1
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,"alex",9,4]
b=a[0] #索引为负时,-1最后一个,向前类推-2就是倒数第二个
a[0]=8
c = a[-1]
print(a)
print(c)
"""
[8, 2, 3, 'alex', 9, 4]
4
Process finished with exit code 0
"""
列表切片slice
----切片语法同字符串【起始:结束:步长】
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,"alex",9,4,5,6,7,8]
b=a[1:9:2]
print(b)
c = a[0:-3]
print(c)
f =a[-3:]
print(f)
"""
[2, 'alex', 4, 6]
[1, 2, 3, 'alex', 9, 4, 5]
[6, 7, 8]
Process finished with exit code 0
"""
----通过切片获取新列表
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,"alex",9,4,5,6,7,8]
b=a[1:5]
print(b)
c = a[:] #复制列表
print(c)
"""
[2, 3, 'alex', 9]
[1, 2, 3, 'alex', 9, 4, 5, 6, 7, 8]
Process finished with exit code 0
"""
-----列表切片赋值
切片赋值可以一次修改对个列表元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,"alex",9,4,5,6,7,8]
a[1:3] =["hello","world"]
print(a)
"""
[1, 'hello', 'world', 'alex', 9, 4, 5, 6, 7, 8]
Process finished with exit code 0
"""
切片赋值可以增加列表元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,"alex",9,4,5,6,7,8]
a[1:] =["hello","world","alex","rose"]
print(a)
"""
[1, 'hello', 'world', 'alex', 'rose']
Process finished with exit code 0
"""
列表切片赋值
切片赋值可以不替换任何元素情况下,为列表插入新元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1, 'hello', 'world', 'alex', 'rose']
a[2:2]=["a","b"]
print(a)
"""
[1, 'hello', 'a', 'b', 'world', 'alex', 'rose']
Process finished with exit code 0
"""
切片赋值可以删除列表元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1, 'hello', 'world', 'alex', 'rose']
a[2:4]=[]
print(a)
"""
[1, 'hello', 'rose']
Process finished with exit code 0
"""
6、Python3中常用列表函数
1)len函数:可以用来得到序列的长度
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1, 'hello', 'world', 'alex', 'rose']
b = len(a)
print(b)
"""
5
Process finished with exit code 0
"""
2)max函数:可以用来得到序列最大值的元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2, 99,56,88]
b = max(a)
print(b)
"""
99
Process finished with exit code 0
"""
3)min函数:可以得到列表中最小的元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2, 99,56,88]
b = ["a","yy","dd"]
c =["a",1,"4"]
print(min(a))
print(min(b))
print(min(c)) #报错
"""
1
a
print(min(c))
TypeError: '<' not supported between instances of 'int' and 'str'
Process finished with exit code 0
"""
4)sum函数
---可以得到列表中所有元素的和
---sum(列表【,起始值】)
---起始值可以省略,缺省为0
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3]
b = sum(a)
print(b,type(b))
d = sum([b,10])
print(d)
"""
6 <class 'int'>
16
Process finished with exit code 0
"""
5).index函数:得到列表中某个元素的索引(下标)
---L.index(value)
---value:要找的元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,33,88,9]
b = a.index(9) #相同的元素只会操作第一次出现的位置
print(b)
"""
5
Process finished with exit code 0
"""
6).append函数
----L.append(object)
----object要添加的元素
----返回None
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,33,88,9]
b = a.append("alex")
print(a)
print(b)
c = a.append([11,22])
print(a)
print(c)
"""
[1, 2, 3, 5, 6, 9, 10, 33, 88, 9, 'alex']
None
[1, 2, 3, 5, 6, 9, 10, 33, 88, 9, 'alex', [11, 22]]
None
Process finished with exit code 0
"""
7)合并列表(extend)
向列表追加另一个列表
----L.extend(iterable)
----iterable要添加的元素(可以迭代对象)
----返回None
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,33,88,9]
b = a.extend("alex")
print(a)
print(b)
c = a.extend(100)
print(a)
print(c)
"""
[1, 2, 3, 5, 6, 9, 10, 33, 88, 9, 'a', 'l', 'e', 'x']
None
c = a.extend(100)
TypeError: 'int' object is not iterable
Process finished with exit code 0
"""
跟元组一样,用加号(+)将两个列表加起来即可实现合并:
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
x=list(range(1, 13, 2))
x + ['b', 'a']
print(x)
"""
[1, 3, 5, 7, 9, 11, 'b', 'a']
Process finished with exit code 0
"""
对于已定义的列表,可以用extend方法一次性添加多个元素:
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
x=[1, 3, 5, 7, 9, 11]
x2=[3, 6, 1]
x.extend(x2)
print(x)
"""
[1, 3, 5, 7, 9, 11, 3, 6, 1]
Process finished with exit code 0
"""
需要说明的是:加号(+)执行列表的合并是非常浪费资源的,因为必须创建一个新列表并将所有对象复制过去,而用extend将元素附加到现有列表(尤其是在构建一个大列表时)就会好很多。
因此,在进行列表合并操作时,尤其是对于大数据量的列表合并,强烈建议使用extend函数。
8).insert函数:向列表指定位置插入元素
---L.insert(index,object)
---index:位置
---object要插入的元素
---返回None
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,33,88,9]
b = a.insert(2,["alex","rose"])
print(a)
print(b)
c = a.insert(5,100)
print(a)
print(c)
"""
[1, 2, ['alex', 'rose'], 3, 5, 6, 9, 10, 33, 88, 9]
None
[1, 2, ['alex', 'rose'], 3, 5, 100, 6, 9, 10, 33, 88, 9]
None
Process finished with exit code 0
"""
9).pop函数
---L.pop([index])
---删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回移除元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,33,88,9]
b = a.pop()
print(a)
print(b)
c = a.pop(2)
print(a)
print(c)
d = a.pop(-1)
print(a)
print(d)
"""
[1, 2, 3, 5, 6, 9, 10, 33, 88]
9
[1, 2, 5, 6, 9, 10, 33, 88]
3
[1, 2, 5, 6, 9, 10, 33]
88
Process finished with exit code 0
"""
10).remove函数:
---L.remove(x)
---从列表中删除第一次出现在列表中的值
---返回None
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
b = a.remove(5)
print(a)
print(b)
c = a.remove("alex")
print(a)
print(c)
"""
[1, 2, 3, 6, 9, 10, 'alex', 33, 88, 9]
None
[1, 2, 3, 6, 9, 10, 33, 88, 9]
None
Process finished with exit code 0
"""
11)del 语句删除列表元素
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
b = a.remove(5)
print(a)
print(b)
c = a.remove("alex")
print(a)
print(c)
"""
[1, 2, 3, 6, 9, 10, 'alex', 33, 88, 9]
None
[1, 2, 3, 6, 9, 10, 33, 88, 9]
None
Process finished with exit code 0
"""
12).copy函数
---L.copy() 浅复制处解析
---复制此列表(只复制一层,不会复制深层对象)
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
b =a.copy()
print(a,id(a))
print(b,id(b))
c =a is b
print(c)
d =a
print(d,id(d))
"""
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9] 44549704
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9] 44549744
False
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9] 44549704
Process finished with exit code 0
"""
13).reverse
---列表的反转,只反转排列顺序,列表的值是不会改变的
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
print("反转前的数据===》",a)
b =a.reverse()
print("反转后的数据===》",a)
print(b)
"""
反转前的数据===》 [1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
反转后的数据===》 [9, 88, 33, 'alex', 10, 9, 6, 5, 3, 2, 1]
None
Process finished with exit code 0
"""
14).sort
--Lsort(reverse = False)
---将列表的顺序按值得小到大的顺序进行排列
列表的sort方法可以实现就地排序(无需创建新对象,字符串按首字母进行排序):
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,72,3,45,6,9,10,33,88,9]
print("排序前的数据===》",a)
b =a.sort()
print("排序后的数据===》",a)
print(b)
s=['a','ab','3e','z']
print("排序前的数据===》",s)
g=s.sort()
print("排序后的数据===》",s)
"""
排序前的数据===》 [1, 72, 3, 45, 6, 9, 10, 33, 88, 9]
排序后的数据===》 [1, 3, 6, 9, 9, 10, 33, 45, 72, 88]
None
排序前的数据===》 ['a', 'ab', '3e', 'z']
排序后的数据===》 ['3e', 'a', 'ab', 'z']
Process finished with exit code 0
"""
sort有几个很好用的选项,一个是次要排序键,即一个能够产生可用于排序的值的函数。如可以通过长度对一组字符串进行排序:
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
b=['a','nl','drz','mowgt','aa']
b.sort(key=len)
print(b)
"""
['a', 'nl', 'aa', 'drz', 'mowgt']
Process finished with exit code 0
"""
再比如是否进行降序排列,如下面通过对首字母进行降序排列的示例:
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
b=['a','nl','drz','mowgt','aa']
b.sort(key= lambda x:x[0], reverse=True)
print(b)
"""
['nl', 'mowgt', 'drz', 'a', 'aa']
Process finished with exit code 0
"""
15).clean:清空列表
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
print("清空前的数据===》",a)
b =a.clear()
print("清空后的数据===》",a)
print(b)
"""
清空前的数据===》 [1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
清空后的数据===》 []
None
Process finished with exit code 0
"""
7、列表的遍历
1)使用while循环
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
i=0
while i<len(a):
print(a[i])
i+=1
"""
1
2
3
5
6
9
10
alex
33
88
9
Process finished with exit code 0
"""
2)使用for循坏
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
for i in a:
print(i)
"""
1
2
3
5
6
9
10
alex
33
88
9
Process finished with exit code 0
"""
8、列表复制
浅复制只复制一层
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a=[1,2,3,5,6,9,10,"alex",33,88,9]
b=a
print(b)
b[0]="rose"
print(b)
print(a)
print(a is b)
"""
[1, 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
['rose', 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
['rose', 2, 3, 5, 6, 9, 10, 'alex', 33, 88, 9]
True
Process finished with exit code 0
"""
深拷贝需要使用copy模块
---全部复制
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
import copy
a=[1,2,3,5,[6,9,10],"alex",33,88,9]
b = copy.deepcopy(a)
print(a,id(a))
print(b,id(b))
print(a is b)
b[4][0]=40
print(b)
"""
[1, 2, 3, 5, [6, 9, 10], 'alex', 33, 88, 9] 47178256
[1, 2, 3, 5, [6, 9, 10], 'alex', 33, 88, 9] 47179016
False
[1, 2, 3, 5, [6, 9, 10], 'alex', 33, 88, 9]
[1, 2, 3, 5, [40, 9, 10], 'alex', 33, 88, 9]
Process finished with exit code 0
"""
9、列表推导式语法
列表推导式是用可迭代对象依次生成列表内元素的方式
语法:
【表达式for 变量 in 可迭代对象】
或
【表达式 for 变量 in 可迭代对象 if 条件语句】
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
y = [ x**2 for x in range(1,10)]
print(y)
z =[x**2 for x in range(1,10) if x%2==1]
print(z)
"""
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 9, 25, 49, 81]
Process finished with exit code 0
"""
列表推导式嵌套语法
【表达式1 for 变量1 in 可迭代对象1 if 条件语句1 for 变量2 in 可迭代对象3 if 条件语句2】
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
y = [x*y for x in [2,3,5] for y in [7,11,13]]
print(y)
"""
[14, 22, 26, 21, 33, 39, 35, 55, 65]
Process finished with exit code 0
"""
10、列表与字符串
字符串拆分与拼接
----S.split (sep = None,maxsplit = -1) --->list of string
-----S.join(iterable) ---->str
__author__ = 'Administrator'
# -*- coding:utf-8 -*-
a="beijing is captical !"
b =a.split(" ")
print(b)
c = a.split(maxsplit=1)
d = a.split(maxsplit=2)
f = a.split(maxsplit=3)
print(c)
print(d)
print(f)
print("-------join--------")
g="/"
print(g)
h = g.join(["C:","progrom file","python"])
print(h)
"""
['beijing', 'is', 'captical', '!']
['beijing', 'is captical !']
['beijing', 'is', 'captical !']
['beijing', 'is', 'captical', '!']
-------join--------
/
C:/progrom file/python
Process finished with exit code 0
"""
11、字符串与列表比较
---列表 和字符串都是序列,元素之间有先后关系
---字符串中的每个元素只能存储字符,而列表可以存储任意类型
---字符串是不可变的序列,而列表是可以改变的序列