Python学习(列表)

it2022-05-05  147

文章目录

一、列表1.1 创建1.2 拼接1.3 重复1.4 索引(偏移)[ ] ,切片 [ : ] ,[ : : ]1.5 列表的常见操作1.5.1 增1.5.2 删1.5.3 改1.5.4 查 练习:1.6 赋值与深浅拷贝1.7 列表解析式和列表生成式格式:带过滤功能格式嵌套 二、语句补充2.1 print()函数查看帮助文件2.2 格式化字符串%号格式化占位符 2.3 format格式化

一、列表

用方括号括起来的[ ],每一个元素以逗号分割,可以储存不同的数据类型数据特点:是一个有序的、可重复的、可变类型

1.1 创建

创建空列表

li = []

创建多元素列表

li = [1,2,3,"abcd",["1","2","3"]]

强转

sr = "abcd" li = list(sr) print(li,type(li)) #['a', 'b', 'c', 'd'] <class 'list'>

1.2 拼接

li1 = ["I"] li2 = ["Love"] print(li1 + li2) #['I', 'Love']

1.3 重复

li2 = ["Love"] print(li2*3) #['Love', 'Love', 'Love']

1.4 索引(偏移)[ ] ,切片 [ : ] ,[ : : ]

li = ["C","i","t","y","city"] print(li[0]) #C print(li[:2]) #['C', 'i'] print(li[::-1]) #['city', 'y', 't', 'i', 'C'] print(li[4][2]) #t

1.5 列表的常见操作

1.5.1 增
append( ):整体加入extend( ):按元素加入insert( ):按照索引添加通过索引增加,单不能超过已有索引的最大值 li = ["City", "College"] li1 = ["a", "b", "c"] li.append(li1) print(li) # ['City', 'College', ['a', 'b', 'c']] li = ["City", "College"] li1 = ["a", "b", "c"] li.extend(li1) print(li) # ['City', 'College', 'a', 'b', 'c'] li = ["City", "College"] li1 = ["a", "b", "c"] li.insert(1, li1) print(li) # ['City', ['a', 'b', 'c'], 'College'] li1 = ["a", "b", "c"] li1[1:1] = [1, 2, 3] print(li1) # ['a', 1, 2, 3, 'b', 'c']
1.5.2 删

pop( ):返回被删除的元素

如果不指定索引,默认删除最后一个元素删除指定索引对应的元素

remove( ):移除第一次遇到的指定元素,无返回值

del list[ ]:默认删除整个列表,有索引参数则删除该索引对应的元素

clear():清空整个列表

li = ["a", "b", "c", "d", "e"] li.pop() print(li) # ['a', 'b', 'c', 'd'] li.pop(2) print(li) # ['a', 'b', 'd'] li = ["a", "b", "c", "d", "e", "c"] li.remove("c") print(li) # ['a', 'b', 'd', 'e', 'c'] li = ["a", "b", "c", "d", "e", "c"] del li[2] print(li) # ['a', 'b', 'd', 'e', 'c'] li = ["a", "b", "c", "d", "e", "c"] li.clear() print(li) # []
1.5.3 改

按照索引或切片直接修改

li1 = ["a", "b", "c"] li1[2] = "6666" print(li1) # ['a', 'b', '6666'] li1[1:2] = ["x", "y", "z"] print(li1) # ['a', 'x', 'y', 'z', '6666']
1.5.4 查

按照索引、切片、遍历查找

遍历:

元素遍历索引遍历枚举遍历:enumerate( ),对于一个可迭代/可遍历的对象(如列表、字符串等),将其组成一个索引序列,利用它,我们可以同时获得索引和值 # 元素遍历 li = ["a", "b", "c", "d", "e", "c"] for i in li: print(i, end=" ") # a b c d e c # 索引遍历 li = ["a", "b", "c", "d", "e", "c"] for i in range(len(li)): print(li[i], end=" ") # a b c d e c # 枚举遍历 li = ["a", "b", "c", "d", "e", "c"] for i in enumerate(li, 2): print(i, end=" ") # (2, 'a') (3, 'b') (4, 'c') (5, 'd') (6, 'e') (7, 'c') li = ["a", "b", "c", "d", "e", "c"] for index, value in enumerate(li, 2): print(index, value, end=" ") # 2 a 3 b 4 c 5 d 6 e 7 c

练习:

1.input( )函数实现往空列表中添加元素,当输入“q”的时候,结束输入,并返回列表。

2.随机生成30个1`10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0,3],[1,4]…]

#1 li = [] while True: sr = input("请输入元素(输入“q”表示结束):") if sr == 'q': break else: li.append(sr) print(li) #2 方法一 import random rand_int = [] result_li = [] for i in range(30): rand_int.append(random.randint(0,10)) for i in range(0,11): result_li.append([i,rand_int.count(i)]) print(result_li) #2 方法二 import random li = [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0]] for i in range(30): num = random.randint(0, 10) li[num][1] += 1 print(li)

1.6 赋值与深浅拷贝

赋值赋值是对对象的引用 la = [1,2,3,4,5,'a',['b1','b2']] lb = la print(id(la)) #1915507906504 print(id(lb)) #1915507906504 la[5] = "aaa" print(la) #[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] print(lb) #[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]

浅拷贝会创建新对象,内容是原对象的引用

三种实现方法:

切片操作[ : ]

工厂函数list(li)

copy模块内的copy函数

la = [1,2,3,4,5,'a',['b1','b2']] lb2 = la[:] print(id(la)) #2784803493960 print(id(lb2)) #2784804309832 import copy lb_copy = copy.copy(la) print(id(la)) #2784803493960 print(id(lb_copy)) #2784805803720 la.append("test") #添加原子类型,不会影响lb_copy和lb2 print(la) #[1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test'] print(lb2) #[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] print(lb_copy) #[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] la[5] = 'aaa' print(la) #[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']] print(lb_copy) #[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] la[6][1] = 'bbb' print(la) #[1, 2, 3, 4, 5, 'aaa', ['b1', 'bbb']] print(lb_copy) #[1, 2, 3, 4, 5, 'a', ['b1', 'bbb']]

深拷贝

import copy la = [1,2,3,4,5,'a',['b1','b2']] lb_deepcopy = copy.deepcopy(la) print(id(la)) #2351498155784 print(id(lb_deepcopy)) #2351498157064 la[5] = 'aaa' print(la) #[1, 2, 3, 4, 5, ['aaa'], ['b1', 'b2']] print(lb_deepcopy) #[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] la[6][1] = 'bbb' print(la) #[1, 2, 3, 4, 5, 'aaa', ['b1', 'bbb']] print(lb_deepcopy) #[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]

浅拷贝相当于我们只拷贝了一层,修改外层元素,就会修改引用,让它们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置

深拷贝拷贝对象的所有元素,包括多层嵌套的元素。因此,是开辟了一个新的内存储存区,和数据源没有关系了

1.7 列表解析式和列表生成式

格式:
[exp for iter_val in iter]

列表生成式:用来生成列表的特定的语法形式

sr = "城市学院" print([ord(x) for x in sr])

实现原理:

迭代 iter 中的每一个元素,每迭代一次的结果赋值给 iter_val ,再通过 exp 运算得到一个新的值,最后所有通过表达式计数的值以一个列表的形式返回

补充:

三目运算符

y = 10 x = y + 1 if y > 10 else y - 1 print(x)
带过滤功能格式
[exp for iter_val in iter if if_condtiom]

如:

print([i for i in range(10) if i % 2 == 0])
嵌套
name = ["Tom","Jack","Lucy"] subject = ["Python","Java","C","C++"] print([[i,j] for i in name for j in subject])

二、语句补充

2.1 print()函数查看帮助文件

>>> help(print) Help on built-in function print in module builtins: print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.

语法格式

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

等价于

print(value1,value2,...,valuen,sep=' ', end='\n', file=sys.stdout, flush=False)

如:

a,b,c = 1,2,3 print(a,b,c,sep = '*') #1*2*3 for i in range(3): print(i,end = '*') #0*1*2*

2.2 格式化字符串

%号格式化
print("%d" % 666) #666 print("His name is %s, his age is %d." % ("Tom", 18)) #His name is Tom, his age is 18. print("His name is ","Tom", "his age is",18,".") #His name is Tom his age is 18 . print("His name is "+"Tom"+ "his age is"+str(18)+".") #His name is Tomhis age is18.
占位符
格式描述%d有符号的整数%s字符串%c字符及ASCII码%o无符号八进制整数%x/%X无符号十六进制整数%e/%E浮点数,科学计数法%f浮点数

% 格式化字符串 用%匹配参数,注意个数一一对应

print("%d%%"%100) #100%

2.3 format格式化

位置映射 print("{}:{}".format('Tom',18)) #Tom:18 print("name:{},age:{}".format('Tom',18)) #name:Tom,age:18 关键字映射 print("name:{},age:{},{address}".format('Tom', 18, address="Hangzhou")) # name:Tom,age:18,Hangzhou 元素访问 print("第一个元素是{0[0]},第二个元素是{0[1]},第三个元素是{0[2]},\ 第四个元素是{1[0]}.".format(('www.','google.','com'),("baidu.","com"))) #第一个元素是www.,第二个元素是google.,第三个元素是com,第四个元素是baidu..

最新回复(0)