列表及元组基础知识

print的补充与格式化字符串

print()在help后返回的帮助文件
>>> help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    # ...表示 其他传入值 value2、value3...
    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.
     #将内容打印的地方默认为当前窗口 可以在txt等其他允许的文件打印 
    sep:   string inserted between values, default a space.
    #set表示value之间的间隔输入的元素,默认为空格
    >>> print (1,2,3,4,5,sep='!')
    >>>1!2!3!4!5
    end:   string appended after the last value, default a newline.
    >>> for i in range(4):
	      print(i,end='#')
    >>> 0#1#2#3#    
    #end表示在打印完所有value之后再追加打印一个元素,默认为换行(\n)
    flush: whether to forcibly flush the stream.
    #是否刷新数据流 Ture后即为及时显示(输入1个字符即显示)
字符串的格式
  • %号格式化
name='Bob'
age=13
print('His name is %s,his age is %d.'%(name,age))
print('His name is ',name,',his age is ',age,',',sep='')
print('His name is '+name+',his age is '+str(age)+',')
结果
His name is Bob,his age is 13.
His name is Bob,his age is 13.
His name is Bob,his age is 13.

  • 占位符
格式描述
%d有符号的整数
%s字符串
%c字符及ASCII码
%o无符号八进制整数
%x(X)无符号十六进制整数
%e(E)浮点数,科学计数(10的多少次幂)
%f浮点数

注:如当需要使用%打印’100%'时

print('%d%%'%100) #此时'%%’表示一个%,前面的%表示转译字符,用\会报错
100%

format格式化

1.位置映射
print('name:{},age:{}'.format('tom',18))
结果
name:tom,age:18
2.关键字映射
print('name:{},age:{},adress:{address}'.format('tom',18,address='China'))
结果
name:tom,age:18,adress:China #注作为关键字的内容必须放在format最后面
3.对应元素映射
print('第一个:{0[0]},第二个:{0[1]},第三个:{0[2]}'.format(('aaa','bbb','ccc')))
结果
第一个:aaa,第二个:bbb,第三个:ccc
print('第一个:{0[0]},第二个:{1[1]},第三个:{0[2]}'.format(('aaa','bbb','ccc'),('111','222')))
结果
第一个:aaa,第二个:222,第三个:ccc

列表

1.格式:

​ 用[ ]括起来的一组元素,元素之间以’,'间隔

​ 可以存储多种数据类型

2.特点:

​ 是有序的,元素可以重复,是一个可变类型

3.创建:
  • 创建空列表:

    l=[ ]

  • 创建多元素列表:

    l=[1,1,2,3,‘aa’,{ },(1,2),[‘a’,‘b’]]

  • 类型强转:

    str1='hello'
    li=list(str1)
    print(li,type(li))
    结果
    ['h', 'e', 'l', 'l', 'o'] <class 'list'>
4.简单操作
#####拼接#####
li1=[1,2,3]
li2=[7,7,7]
print(li1+li2)
结果:
>[1, 2, 3, 7, 7, 7]
#####重复#####
li1=[1,2,3]
print(li1*3)
结果
[1, 2, 3, 1, 2, 3, 1, 2, 3]
#####切片#####
>>> li=['a','b','c','d','e','f','g','h']
>>> li[1:5:2]  #取指定范围指定步长
['b', 'd']
>>> li[::-1]   #取反
['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
5.常见操作
  • 增删改查

    增:append()、extend()、insert()

>>> li1=['name','age']
>>> li2=['city','college']
>>> li1.append(li2) 
>>> li1
['name', 'age', ['city', 'college']]
>>> li1.extend(li2)  #在一个列表(li1)末尾导入另一个列表(li2) 用li1=li1+li2效果相同
>>> li1
['name', 'age', ['city', 'college'], 'city', 'college']
>>> li1.insert(0,'country')	#在指定索引位置插入元素
>>> li1
['country', 'name', 'age', ['city', 'college'], 'city', 'college']  

​ 删:pop() 、clear()、remove()、del

>>> li=[0,1,2,3,4,5,6,7,8,9]
>>> li.pop()	#取出最后一个元素返回该值,并在原列表中删除该值
9
>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8]  #删除元素后的列表
>>> li.pop(1)     #取出指定索引位置的元素返回该值,并在原列表中删除该值
1
>>> li
[0, 2, 3, 4, 5, 6, 7, 8] #删除元素后的列表
>>> li.remove(2)   #从左开始删除第一个指定的元素(只删除一个)
>>> li
[0, 3, 4, 5, 6, 7, 8]  #删除元素后的列表
>>> li.clear()      #将列表所有元素清除,列表将变成一个空列表
>>> li
[]
>>> del li       #将列表整个删除,列表(li)将消失再调用该列表(li)会报错
>>> li
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    li
NameError: name 'li' is not defined

改:直接根据索引

li=[1,1,1,1,1,1]
>>> li[1]=2  #改指定索引位置的元素
>>> li
[1, 2, 1, 1, 1, 1]
>>> li[2:]=3,4,5,6  #改指定范围的元素
>>> li
[1, 2, 3, 4, 5, 6]
#注:索引不能超出列表自身范围,即不能通过索引来为列表添加新的元素

遍历:

#####元素遍历#####
>>> li[2:]=3,4,5,6
>>> li
[1, 2, 3, 4, 5, 6]
>>> li=['a','b','c']
>>> for i in li:
	print(i)	
a
b
c
#####索引遍历#####
>>> li=['a','b','c']
>>> for i in range(len(li)):
	print(li[i],end=' ')
    
a b c 
#####枚举遍历#####
enumerate()  #对于的迭代对象,将其组成一个索引序列,利用该序列,得到索引即对应值
li=['a','b','c']
>>> for i ,j in  enumerate(li):
	print(i,j)
	
0 a
1 b
2 c
  • 计数:count(),查找某元素的次数

  • 反转:reverse(),将整个列表反转

  • 排序:sort(),将列表排序

    >>> li=[1,1,2,35,7,1]
    >>> li.count(1)   #统计元素(1)出现的次数
    3
    >>> li.reverse() #反转
    >>> li
    [1, 7, 35, 2, 1, 1]
    >>> li.sort()   #排序,升序(必须是同种数据类型)
    >>> li
    [1, 1, 1, 2, 7, 35]
    >>> li.sort(reverse=True)  #排序,降序(必须是同种数据类型)
    >>> li
    [35, 7, 2, 1, 1, 1]
6列表解析式(生成式)

格式:[表达式 for 迭代元素 in 可迭代对象 (其他条件)]

实现原理:

迭代[可迭代对象]中的每一个元素,每迭代一次的结果赋值给对应的迭代元素,再通过表达式的运算得到一个新的值,最后通过所有表达式计算的值(可以再通过其他条件筛选)以一个列表的形式返回。

li=[x for x in range(10)]
>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> li=[x for x in range(10) if x%2==0]
>>> li
[0, 2, 4, 6, 8]
>>> sr='今天是晴天'
>>> li=[ord(x) for x in sr]
>>> li
[20170, 22825, 26159, 26228, 22825]

赋值与拷贝

赋值:对对象的引用
>>> ls=[1,2,3,4]
>>> lf=ls
>>> print(id(ls),id(lf))
60164536 60164536
拷贝:浅拷贝与深拷贝
  • 浅拷贝会创建新的对象,内容是对原对象的引用

    三种实现方法:

    切片操作[:]

    工厂函数 list(li)

    copy模块内的copy函数

la=[1,2,3,'a']
#####切片操作[:]#####
lb=la[:]
print(id(la),id(lb))
print(la==lb)
print(la is lb)
结果
21644752 21645912
True
False
#####copy函数#####
import copy
lb=copy.copy(la)
print(id(la),id(lb))
print(la==lb)
print(la is lb)
结果
56305144 56241928
True
False
#####工厂函数#####
lb=list((la))
print(id(la),id(lb))
print(la==lb)
print(la is lb)
结果
21972432 23277360
True
False
  • 深拷贝
import copy
la=[1,2,3,'a']
lb=copy.deepcopy(la)
print(id(la),id(lb))
print(la==lb)
print(la is lb)
浅拷贝与深拷贝的差别
  • 浅拷贝相当于我们只拷贝了一层,修改外层元素,会修改引用,让它们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置。
  • 深拷贝拷贝对象的所有元素,包括多层嵌套的元素,因此是开辟了一个新的内存存储区,和数据源没有关系了
>>>import copy
>>>a = [1, 2, 3, 4, ['a', 'b', 'c']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> id(a)
19276104
>>> id(b)
19276104
>>> id(c)
19113304
>>> id(d)
19286976
>>> a.append(5)    #操作1对一层数据操作
>>> a[4].append('hello')   #操作2对深层数据操作
>>> a
[1, 2, 0, 4, ['a', 'b', 'c', 'hello'], 5]
>>> b
[1, 2, 0, 4, ['a', 'b', 'c', 'hello'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c', 'hello']]
>>> d
[1, 2, 3, 4, ['a', 'b', 'c']]

其他

三目运算符
a=1
b=1
a+=2 if a<2 else b-1
print(a,b)
3 1
列表生成式

(与列表.6相似)

a=[1,2,3]
b=['a','b','c']
li=[[i,j] for i in a for j in b]
print(li)
结果
[[1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, 'b'], [2, 'c'], [3, 'a'], [3, 'b'], [3, 'c']]

元组

特点

有序、元素可以重复,不可更改对象。 符号: ( )

创建方法
  • 空元组的创建

  • 单元素元祖的创建

>>> tu=()
>>> type(tu)
<class 'tuple'>
>>> tu=('a')
>>> type(tu)
<class 'str'>
>>> type(tu)
<class 'str'>
>>> tu=('a',)  #单元素元元组创建时必须再加一个','不然会默认是字符串
>>> type(tu)
<class 'tuple'>
  • 多元素元祖的创建(可以包含多种数据类型)
  tu=(1,2,3)  #创建单元素元组
  tu2=(4,5,6)
  print(tu+tu2)  #元组的拼接
  print(tu*3)    #元组的重复
  print(tu[1:],tu[0])  #元组的切片及索引
  结果
  (1, 2, 3, 4, 5, 6)
  (1, 2, 3, 1, 2, 3, 1, 2, 3)
  (2, 3) 1

切片查、索引查、index()

>>> tp=(1,2,3,4,5,6,'a','b')
  >>> tp[2:]  #切片查
  (3, 4, 5, 6, 'a', 'b')
  >>> tp[4]   #索引查
  5
  >>> tp.index('a')  
  6
  >>> del tp   #删除整个列表
  >>> tp
  Traceback (most recent call last):
    File "<pyshell#22>", line 1, in <module>
      tp
  NameError: name 'tp' is not defined

注:由于元组为不可变类型,所以不能进行增、删元素的操作。但是可以将整个元组删除del。

>>> tp=(1,2,3,4,5,6,'a','b')
>>> del tp   #删除整个列表
>>> tp
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    tp
NameError: name 'tp' is not defined
tu=(1,2,3)
print(id(tu))
del tu
tu=(1,2,3)
print(id(tu))   ###垃圾回收机制,其他类型有相似效果
结果
23988864
23988864
遍历

元素遍历
索引遍历
枚举遍历 ennumerate

tup=(1,2,3,4,5,'a')
for i in tup:
    print(i,end=' ')
print()
for i in range(len(tup)):
    print(tup[i],end=' ')
print()
for i,j in enumerate(tup):
    print(i,j,'|',end=' ')
结果
1 2 3 4 5 a 
1 2 3 4 5 a 
0 1 | 1 2 | 2 3 | 3 4 | 4 5 | 5 a |
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值