本节内容

  1. 列表、元祖操作
  2. 字符串操作
  3. 字典操作
  4. 集合操作
  5. 文件操作
  6. 字符编码与转码 
  7. 三元运算&生成式&成员运算&解压法&队列堆栈&数据类型转换

1. 列表操作

列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

语法

names = ['Alex',"Tenglan",'Eric']

通过下标访问列表中的元素,下标从0开始计数

>>> names[0]
'Alex'
>>> names[2]
'Eric'
>>> names[-1]
'Eric'
>>> names[-2] #还可以倒着取
'Tenglan'

切片:取多个元素  

>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
>>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
['Tenglan', 'Eric', 'Rain']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Tenglan', 'Eric', 'Rain', 'Tom']
>>> names[0:3] 
['Alex', 'Tenglan', 'Eric']
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Alex', 'Tenglan', 'Eric']
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
['Rain', 'Tom', 'Amy'] 
>>> names[3:-1] #这样-1就不会被包含了
['Rain', 'Tom']
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
['Alex', 'Eric', 'Tom'] 
>>> names[::2] #和上句效果一样
['Alex', 'Eric', 'Tom']

追加

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
>>> names.append("我是新来的")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']

插入

>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.insert(2,"强行从Eric前面插入")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']

>>> names.insert(5,"从eric后面插入试试新姿势")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

修改

>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> names[2] = "该换人了"
>>> names
['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']

删除

>>> del names[2] 
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> del names[4]
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> 
>>> names.remove("Eric") #删除指定元素
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.pop() #删除列表最后一个值 
'我是新来的'
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']

扩展

>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]

拷贝

l = ['1','2','3',[1,2,3]]
re = l.copy()
print(l)  # ['1', '2', '3', [1, 2, 3]]
print(re) # ['1', '2', '3', [1, 2, 3]]

l[3].append(4)
print(l)  # ['1', '2', '3', [1, 2, 3, 4]]
print(re) # ['1', '2', '3', [1, 2, 3, 4]]

import copy
ret = copy.copy(l) # 同上的结果,我们称为浅拷贝

ret2 = copy.deepcopy(l) # 2份独立的空看,我们称为深拷贝
print(l)     # ['1', '2', '3', [1, 2, 3, 4]]
print(ret2)  # ['1', '2', '3', [1, 2, 3, 4]]

l[3].append(5)
print(l)     # ['1', '2', '3', [1, 2, 3, 4, 5]]
print(ret2)  # ['1', '2', '3', [1, 2, 3, 4]]

# 浅拷贝是拷贝了一份内存指引,都指向一个地址,为什么这么做,因为PYTHON为了避免数据类型里面有无限大的子集,避免浪费

统计

>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.count("Amy")
2

排序&翻转

>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.sort() #排序
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()   #3.0里不同数据类型不能放在一起排序了,擦
>>> names[-3] = '1'
>>> names[-2] = '2'
>>> names[-1] = '3'
>>> names
['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3']
>>> names.sort()
>>> names
['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom']

>>> names.reverse() #反转
>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']

获取下标

>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
>>> names.index("Amy")
2 #只返回找到的第一个下标

元祖

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

语法

names = ("alex","jack","eric")

元组本身是不可变的,但是内部的元素可以是可变类型

2个方法 一个 count 一个 index,可以切片,索引取值,成员操作

程序练习 

请闭眼写出以下程序。

程序:购物车程序

需求:

  1. 启动程序后,让用户输入工资,然后打印商品列表
  2. 允许用户根据商品编号购买商品
  3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 
  4. 可随时退出,退出时,打印已购买商品和余额

2. 字符串操作

特性:不可修改

py基础2--列表,元祖,字典,集合,文件
#!/usr/bin/env python
#_*_coding:utf-8_*_

#strip 方法用于移除字符串头尾指定的字符(默认为空格)。
#str.strip([chars]);
# chars移除字符串头尾指定的字符。 这是一个包含的关系
name = "*joker**"
print(name.strip("*"))
print(name.lstrip("*")) #去除左边
print(name.rstrip("*")) #去除右边

#startswith,endswith
name = "joker_li"
print(name.endswith("li")) #是否以什么结尾
print(name.startswith("joker")) #是否以什么开头

#replace
name = "joker is good joker boy!"
print(name.replace('joker','li')) #所有joker替换li
print(name.replace('joker','li',1)) #从左到右替换1次

#find,rfind,index,rindex,count
name = 'jokerk say hi'
print(name.find('s'))   #字符串也是可以切片找不到则返回-1不会报错,找到了则显示索引
print(name.count('k'))  #统计包含有多少个

#split
name = 'root:x:0:0::/root/:bin/bash'
print(name.split(':')) #默认分隔符为空格
name = 'c:/a/b/c/d.txt' #想拿到顶级目录
print(name.split('/',1)) #按多少次切片,从左边
name = 'a|b|c'
print(name.rsplit('|',1)) #按多少次切片,从右边

#join
tag = ' '
print(tag.join(['joker','li','good','boy'])) #可迭代对象必须都是字符串
#也就是说这个方法是将列表转换为字符串,如果tag有变量的话,就会循环加

#center,ljust,rjust,zfill
name = 'joker'
print(name.center(10,'_')) #不够10个字符,用_补齐
print(name.ljust(10,'*')) #左对齐
print(name.rjust(10,'*')) #右对齐,注意这个引号内只能是一个字符
print(name.zfill(10)) #右对齐,用0补齐就是

#expandtabs
name = 'joker\thello'
print(name)
print(name.expandtabs(4)) #expand扩张的意思,就是将tab建转为多少个空格

#lower,upper
name = 'joker'
print(name.lower()) #大写变小写,如果本来就是小写,那就没变化
print(name.upper()) #小写变大写,如果本来就是大写,那就没变化

#capitalize,swapcase,title
name = 'joker li'
print(name.capitalize()) #首字母大写
print(name.swapcase()) #大小写对调
print(name.title()) #每个单词的首字母大写

#is数字系列
num1 = b'4' #bytes 类型
print(type(num1))
num2 = u'4' #unicode类型,在3里默认就是这个类型
print(type(num2))
num3 = '' #中文数字
num4 = '' #罗马数字

#isdigt,bytes,unicode
print(num1.isdigit()) #是不是一个整数数字,如果是浮点数就会False
print(num2.isdigit())
print(num3.isdigit()) #False
print(num4.isdigit()) #罗马数字 False ,不是一个整数

#isdecimal,uncicode
#bytes类型无isdecimal方法
print(num2.isdecimal()) #检查字符串是否只包含十进制字符。这种方法只存在于unicode对象
#注意:定义一个十进制字符串,只需要在字符串前添加 'u' 前缀即可
print(num3.isdecimal())
print(num4.isdecimal())

#isnumberic:unicode,中文数字,罗马数字
#bytes类型无isnumberic方法
print(num2.isnumeric()) #判断是不是数字,包括中文大写数字,罗马数字等
print(num3.isnumeric())
print(num4.isnumeric())

#三者不能判断浮点数
num5='4.3' #全是false
print(num5.isdigit())
print(num5.isdecimal())
print(num5.isnumeric())
# 最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
# 如果要判断中文数字或罗马数字,则需要用到isnumeric

#is
print('===>')
name='joker123'
print(name.isalnum()) #字符串由字母和数字组成
print(name.isalpha()) #字符串只由字母组成

print(name.isidentifier()) #判断是不是一个合法的表示符
print(name.islower()) #判断是不是小写
print(name.isupper()) #是不是大写
print(name.isspace()) #判断是不是空格
print(name.istitle()) #每个单词字母首字母大小
View Code

相关文章:

  • 2021-08-05
  • 2021-07-29
  • 2021-07-03
  • 2022-12-23
  • 2022-12-23
  • 2021-11-09
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-21
  • 2022-12-23
  • 2021-08-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案