python数据类型之列表(二)

1.python 列表说明


python的列表是一种有序且可变的序列,列表使用中括号[]进行定义,各项元素之间使用逗号分隔。python的列表与其他编程语言中的数组很像,但独特之处在于python并不要求列表中的元素必须都是同一个类型,而是可以存储任意类型的数据

列表和字符串都是序列,同样支持索引方式访问,也支持切片操作,不同于字符串的是列表可以修改列表的内容

在定义列表时,不需要指定列表的长度,也不用担心持续向列表中写入新的数据会达到存储容量限制,python列表是动态扩容。

列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。

 2.创建列表

创建空列表有两种方式:

1)使用[ ]创建空列表

2)使用内置函数创建空列表

#coding=utf-8
#列表的定义
list1=[];  #使用[ ]创建空列表
list2=list(); #使用内置函数创建空列表
print(list1,list2,type(list1),type(list2),len(list1),len(list2))

结果运行:

[] [] <class 'list'> <class 'list'> 0 0

2.1 使用[ ]创建列表

2.1.1 使用[ ] 创建列表

#coding=utf-8;
# 创建一个空列表
empty_list=[];
# 打印创建的空列表
print empty_list;
#向空列表添加元素
empty_list.append(1);
empty_list.append("aa");
empty_list.append('#');
#打印列表
print empty_list;
#创建一个有多元素的列表
lst = [1,"2",'3',True,["a","b"]];
print lst;

运行结果:

[]
[1, 'aa', '#']
[1, '2', '3', True, ['a', 'b']]

空列表的长度是0,此后你可以使用append方法向列表添加元组。列表对存储在其中的元素类型没有要求,因此,你可以将任意类的元素存储在列表中,甚至包括列表本身,后面将要学习的元组,字典,集合,同样可以存在列表中。

2.1.2 使用内置函数创建列表

#使用内置函数创建列表
lst1 = list("python");
lst2  = list([1,2,3]);
print lst1;
print lst2;

运行结果:

['p', 'y', 't', 'h', 'o', 'n']
[1, 2, 3]

能够作为list参数的不只是字符串和列表,任何可迭代对象都可以作为list函数的参数,list会返回一个新的列表。

3.访问列表里的元素。

访问列表里的元素只能使用索引方式,它的一般代码形式如下:

list[index]或
list[start-index:end-index]

在列表对象后面紧跟一对中括号[],中括号里的index是索引值,索引从0开始,正向索引逐个递增,列表的最大索引值是列表的长度减去1。python列表的索引支持反向索引,最后一个元素的索引值是-1,反向递减。以上面的列表为例。

4.向列表里新增数据

向一个列表新增数据,有三个常用的方法,他们有各自的应用场景,这三个方法分别是:

  1. append:在列表的末尾新增数据。
  2. insert:在指定的索引位置的前面向列表中插入一个新的元素,指定的插入索引位置是多少,新元素的索引就是多少。
  3. extend:append和inset一次只能新增一个元素,extend方法可以一次性将另一个序列里的元素追加到列表的末尾。

4.1 append 方法在列表的末尾新增数据。

#coding=utf-8
lst=[1,2,3];
print  lst;
lst.append(4);
lst.append(5);
print lst;

运行结果:

[1, 2, 3]
[1, 2, 3, 4, 5]

新增的数据一定会成为列表的最后一个元素。

4.2 insert方法在指定的索引位置的前面向列表中插入一个新的元素,指定的插入索引位置是多少,新元素的索引就是多少。

#insert方法在指定的索引位置的前面向列表中插入一个新的元素,指定的插入索引位置是多少,新元素的索引就是多少。
insertlst=[1,3,5,7,9];
insertlst.insert(1,2)
print insertlst;
#向0索引添加0
insertlst.insert(0,0);
print insertlst;
#由于insert只能在指定索引的前面插入,因此你无法使用insert方法在列表的末尾插入新的元素
insertlst.insert(-1,"end");
print insertlst;

运行结果:

[1, 2, 3, 5, 7, 9]
[0, 1, 2, 3, 5, 7, 9]
[0, 1, 2, 3, 5, 7, 'end', 9]

我使用insert方法在索引0的前面插入新元素0,插入后,0的索引就是0。由于insert只能在指定索引的前面插入,因此你无法使用insert方法在列表的末尾插入新的元素,列表的最大索引是7,如果insert指定插入索引位置为7,那么新插入元素的索引就会是7,而原本在索引7的位置上的元素将被移动到索引8的位置上。

4.3 append和inset一次只能新增一个元素,extend方法可以一次性将另一个序列里的元素追加到列表的末尾。

#extend方法可以一次性将另一个序列里的元素追加到列表的末尾
lste1=[1,2,3];
lste2=["a","b","c"];
lste2.extend(lste1);
print lste2;

运行结果:

['a', 'b', 'c', 1, 2, 3]

4.4 列表添加元素方法练习

#coding=utf-8
#列表的定义
list1=[];  #使用[ ]创建列表
list2=list(); #使用内置函数创建列表
print(list1,list2,type(list1),type(list2),len(list1),len(list2))

#列表的新增
list2=[]
#在列表的末尾新增数据
list1.append(1);
list1.append(2)
list1.append("A")
list1.append("B")
print(list1.append(1),list1)
#在指定的索引位置的前面向列表中插入一个新的元素,指定的插入索引位置是多少,新元素的索引就是多少。
list2.insert(0,22)
list2.insert(1,44)
list2.insert(2,"AA")
list2.insert(3,"BB")
print(list2.insert(0,22),list2)
#append和inset一次只能新增一个元素,extend方法可以一次性将另一个序列里的元素追加到列表的末尾。
list3=list1.extend(list2)
print(list1,list3,list1.extend(list2))
#append()、extend()和insert()只是修改列表,这三个方法没有返回值,所以不能用于赋值,赋值只能得到none

运行结果:

[] [] <class 'list'> <class 'list'> 0 0
None [1, 2, 'A', 'B', 1]
None [22, 22, 44, 'AA', 'BB']
[1, 2, 'A', 'B', 1, 22, 22, 44, 'AA', 'BB', 22, 22, 44, 'AA', 'BB'] None None

5.修改列表里的数据

修改列表里的某一项元素,需要通过索引方式找到元素然后重新对其赋值。

#coding-utf-8
lst=[1,2,3,"abc","12a",[12,"ai","bi",[1,2,"k"]],7,[1,2],9]

print(type(lst),len(lst),lst)
lst[0]="第一索引0";
print(lst)
lst[5][3][0]=61;
print(lst)
lst[7][0]=8
print(lst)

运行结果:

<class 'list'> 9 [1, 2, 3, 'abc', '12a', [12, 'ai', 'bi', [1, 2, 'k']], 7, [1, 2], 9]
['第一索引0', 2, 3, 'abc', '12a', [12, 'ai', 'bi', [1, 2, 'k']], 7, [1, 2], 9]
['第一索引0', 2, 3, 'abc', '12a', [12, 'ai', 'bi', [61, 2, 'k']], 7, [1, 2], 9]
['第一索引0', 2, 3, 'abc', '12a', [12, 'ai', 'bi', [61, 2, 'k']], 7, [8, 2], 9]

6.删除列表里的数据

删除列表中的数据,有4种方法,分别是:

  1. remove :指明要删除的元素值,删除符合条件的第一个值
  2. pop :指明要删除元素的索引
  3. del :指明要删除元素的索引
  4. clear :清空列表,删除所有元素

6.1 使用remove方法删除列表里的元素需要在方法里指明要删除的元素的值。

#coding=utf-8
lst1=[1,2,3,2,5,2];
lst1.remove(2);
print lst1;

运行结果:

[1, 3, 2, 5, 2]

虽然指明要删除2,但是remove方法不会将列表里所有的值为2的元素删除,它只会删除能够找到的第一个符合删除条件的值,剩余的值即便符合删除条件也不会被删除。

同时需要注意的是,如果指定要删除的元素不存在,会引发ValueError异常,因此在使用remove方法之前,务必先使用成员运算符in 或者是其他方法先确定被删除的元素是否真的在列表中。

6.2 使用pop方法删除列表里的元素时需要在方法里指明要删除的元素的索引。

#使用pop方法删除列表里的元素时需要在方法里指明要删除的元素的索引
lst2 =[2,4,6,8,10];
lst2.pop(2);
print lst2;

运行结果:

[2, 4, 8, 10]

6.3 使用del关键字也可以删除指定索引位置的元素。

#使用del关键字也可以删除指定索引位置的元素

lst3 =[1,3,5,7,9];
del lst3[1];
print lst3;

运行结果:

[1, 5, 7, 9]

6.4 clear方法清空列表,删除所有元素

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

clear方法情况列表后,lst变为一个空列表。

lsit 删除综合练习:

#coding=utf-8

lst1=[1,2,3]
lst3=["abc",1,1,2,1]
lst4=[1,2,3,4,5]

#remove 指明列表的值删除,删除符合条件的第一个值
print(lst3)
lst3.remove(1);
print(lst3)
#pop 指明列表的索引值进行删除
print("pop--->",lst1)
lst1.pop(0)
print("pop--->",lst1)
#del 指明列表的索引值进行删除
print("del----->>",lst1)
del lst1[1]
print("del----->>",lst1)
print(lst4)
lst4.clear();
print(lst4)

运行结果:

['abc', 1, 1, 2, 1]
['abc', 1, 2, 1]
pop---> [1, 2, 3]
pop---> [2, 3]
del----->> [2, 3]
del----->> [2]
[1, 2, 3, 4, 5]
[]

7. 遍历列表

#coding=utf-8;
lst=[1,2,3];
#列表for循环遍历
for item in lst:
    print item

运行结果:

1
2
3

 8.列表的一些常见操作

8.1 使用内置函数len获取列表的长度

lst1=[1,2,3,4,5]
#1.获取列表的长度
print len(lst1); #输出5

知晓列表的长度,就能够计算出列表的索引范围,列表的最小索引是0,最大索引是起长度值减1,这在通过索引方式遍历列表时是非常有用的。

lst = [1, 2, 3, 2]
for i in range(len(lst)):
    print(lst[i])

8.2 使用算数运算符+合并两个列表。

lst1=[1,2,3,4,5];
lst2=["a","b","c"];
#2.使用算数运算符+合并两个列表
print lst1+lst2;

运行结果:

[1, 2, 3, 4, 5, 'a', 'b', 'c']

python的序列,例如字符串,列表,元组,都支持算数运算符+

8.3 使用*复制列表,使用 in,not in 判断元素是否在列表里。

#.使用* 复制列表
lst3 =[1,2,"a","c"];
print lst3*3;
#.使用in ont in 判断元素是否在列表里
lst4=[1,2,3,4,5];
print 8 in lst4,1 in lst4,2 not in lst4,9 not in lst4;

运行结果:

[1, 2, 'a', 'c', 1, 2, 'a', 'c', 1, 2, 'a', 'c']
False True False True

9.列表的常用方法

方法功能
count() 统计某个元素在列表中出现的次数
append() 在列表末尾添加新的对象
extend 在列表末尾一次性追加另一个序列中的多个值
index 返回一个元素在列表中第一次出现的位置索引
insert() 将对象插入列表中的指定位置
pop() 删除列表中指定索引的元素,默认删除最后一个并返回该值
remove() 移除列表中某个值的第一个匹配项
reverse() 翻转列表
sort() 对列表进行排序

9.1 实例

#coding=utf-8

lst1=[1,5,4,3,2,1,8,7,1,9]
lst=["a","b","c"]

#count 统一某个元素出现的次数
print(lst1.count(1))
#index 列表名.index(查找的值)返回一个元素在列表中,第一次出现的位置索引
print(lst1.index(1))
#index 列表名.index(查找的值,开始查找的范围索引,结束查找的范围索引)
print(lst1.index(1,1,6))
#reverse() 翻转
lst1.reverse() #函数不返回值,访问lst1
print(lst1.reverse())
print(lst1);
#sort
lst1.sort()
print(lst1)

运行结果:

3
0
5
None
[1, 5, 4, 3, 2, 1, 8, 7, 1, 9]
[1, 1, 1, 2, 3, 4, 5, 7, 8, 9]

2.列表实例1

 

 3.列表实例2

 

# coding=utf-8;
#列表
list1 = [2,4,6,8,10,[3,5,7,9],888];
list2  = ['A','B','C',22,['e','f','g','h','i'],11,22];
list3 = [25,50,35,20,5,30];
list4 = [2,4];
list5 = [2,4];
#list1 增 append()
list1.append(999);
print "新增append:"+str(list1);
#list1 删除del
del list1[5];
print list1;
#list1 插入insert
list1.insert(2,5);
print list1;
#list1 替换
print "str(list1):"+str(list1);
list1 [0] = 777;
print "替换:"+str(list1);
#list1 批量替换
list1 [:3]=[111,222,333];
print "批量替换 list1 [:3]=[111,222,333]:"+str(list1);
#列表截取
print "列表截取:"+str(list1[:3]);
print list2[-3:-1];
print list2[:];
# 列表组合
print "列表组合:"+str(list1+list2);
#列表重复
print "列表重复:"+str(list1 * 3);
#获取列表的长度
print "获取列表的长度:"+str(len(list1));
#列表迭代
for i in list1:print "list1-迭代:"+str(i);
#比较两个列表的元素
print "比较两个列表:"+ str(cmp(list4,list5));
#统计某个元素出现的次数
print "统计某个元素出现的次数:"+str(list2.count(22))
# 排序
list3.sort();
print "对列表进行排序:"+str(list3);

运行结果:

C:\Users\m\PycharmProjects\***\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2022.1.4\plugins\python-ce\helpers\pydev\pydevd.py" --multiprocess --qt-support=auto --client 127.0.0.1 --port 55744 --file C:/Users/m/PycharmProjects/***/venv/mylist.py
Connected to pydev debugger (build 221.6008.17)
新增append:[2, 4, 6, 8, 10, [3, 5, 7, 9], 888, 999]
[2, 4, 6, 8, 10, 888, 999]
[2, 4, 5, 6, 8, 10, 888, 999]
str(list1):[2, 4, 5, 6, 8, 10, 888, 999]
替换:[777, 4, 5, 6, 8, 10, 888, 999]
批量替换 list1 [:3]=[111,222,333]:[111, 222, 333, 6, 8, 10, 888, 999]
列表截取:[111, 222, 333]
[['e', 'f', 'g', 'h', 'i'], 11]
['A', 'B', 'C', 22, ['e', 'f', 'g', 'h', 'i'], 11, 22]
列表组合:[111, 222, 333, 6, 8, 10, 888, 999, 'A', 'B', 'C', 22, ['e', 'f', 'g', 'h', 'i'], 11, 22]
列表重复:[111, 222, 333, 6, 8, 10, 888, 999, 111, 222, 333, 6, 8, 10, 888, 999, 111, 222, 333, 6, 8, 10, 888, 999]
获取列表的长度:8
list1-迭代:111
list1-迭代:222
list1-迭代:333
list1-迭代:6
list1-迭代:8
list1-迭代:10
list1-迭代:888
list1-迭代:999
比较两个列表:0
统计某个元素出现的次数:2
对列表进行排序:[5, 20, 25, 30, 35, 50]

Process finished with exit code 0

 

posted @ 2022-09-06 16:07  家乐福的搬砖日常  阅读(232)  评论(0编辑  收藏  举报