1、Python基础二

一、列表、元祖操作

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

定义一个列表

name = ['alex','tenglan','egg','eva_j']

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

print(name[0])   #结果输出alex
print(name[2])   #结果输出egg       
print(name[-1])  #结果输出eva_j
print(name[-2])  #结果输出egg

通过切片取多个元素:

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]

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

追加:

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
names.append("我是新来的")
print(names)
#执行结果['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']

插入

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
names.insert(2,"我是插队的")
print(names)
#执行结果['Alex', 'Tenglan', '我是插队的', 'Eric', 'Rain', 'Tom', 'Amy']

修改

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
names[2]="换人了"
print(names)
#执行结果['Alex', 'Tenglan', '换人了', 'Rain', 'Tom', 'Amy']

删除

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
del names[4]    #通过下标删除元素
print(names)
#执行结果['Alex', 'Tenglan', 'Eric', 'Rain', 'Amy']
names.remove('Eric')  #删除指定元素
print(names)
#执行结果['Alex', 'Tenglan', 'Rain', 'Amy']
names.pop()      #删除列表最后一个值
print(names)
#执行结果['Alex', 'Tenglan', 'Rain']

扩展

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
b = [1,2,3]
names.extend(b)
print(names)
#执行结果:['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', 1, 2, 

拷贝

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
name_copy = names.copy()
print(name_copy)
#执行结果['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']

统计

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
print(names.count('Alex'))   #统计列表中有多少个Alex
#执行结果1

排序&翻转

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
names.sort()
print(names)
#执行结果['Alex', 'Amy', 'Eric', 'Rain', 'Tenglan', 'Tom']
names.reverse()
print(names)
#执行结果['Tom', 'Tenglan', 'Rain', 'Eric', 'Amy', 'Alex']

获取下标

names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
print(names.index('Tom'))
#执行结果4

元组

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

他只有两个方法,一个是count统计个数,一个是index获取下标

二、字符串操作

特性:不可修改

#字符串的索引与切片
s = 'sadfwedfasdf'
#索引
print(s[0])  #通过索引取第一位字符
#字符串切片
print(s[0:4])    #通过切片取前四位 (顾头不顾尾)

print(s[-1])    #通过-1来取字符串的最后一位

print(s[0:])    #取所有的字符
print(s[:])     #两边什么都不写,也可以取全部

print(s[0:5:2])  #取前五个字符,每两个取一个,2位步长[首:尾:步长]

print(s[4:0:-1])  #通过步长设置-1,吧首尾换一下,来实现字符串倒着写


#字符串的操作
s = 'alExwusir'
s1 = s.capitalize()    #让字符串首字母大写,其它全部小写
print(s1)
s2 = s.upper()    #让字符串全部变成大写
s21 = s.lower()   #让字符串全部小写
print(s2)
s3 = s.swapcase() #让大小写翻转
print(s3)

t = 'alex egon wusir'
t1 = t.title()      #让每个特殊字符隔开的单子首字母大写
print(t1)
s4 = s.center(20,'#')   #让字符串在20个字符的位置居中显示,空白填充物为#
print(s4)
s5 = s.expandtabs()   #如果字符串中有\t选项,输出结果自动加上tab的空格
print(s5)
s6 = len(s)         #获取字符串长度,元祖,字典,列表同样适用
print(s6)

#通过前端传来一个字符串,通过判断前边三个字母的不同来进行不同的操作
s7 = s.startswith('al')   #判断字符串是否已al开头
s71 = s.startswith('e',2,5)  #判断字符串的第三位到第五位是否是以e开头
print(s71)

s8 = s.find('l')    #查找字符串中l的索引,找不到则返回-1,可切片在找
print(s8)

s9 = s.index('l')   #查找字符串中l的索引,找不到则回报错
print(s9)

s = '*alExwusir% '
s10 = s.strip()    #去掉字符串中前后所有的空格
s101 = s.strip('#')  #去掉字符串中前后的#号
s102 = s.strip('* %') #中间得符号 可以不同,结果也会吧前后的删掉
s103 = s.rsplit('%')   #删除字符串右边的*号
s104 = s.lstrip('*')   #删除字符串左边的*号
print(s103)

s11 = s.count('al')    #统计字符串中有多少个al(可切片在找)
print(s11)

s = ':alex:egon:wusir'
s12 = s.split()     #默认以空格为分割符来分割字符串
s121 =s.split(':')  #已冒号为分隔符来分割字符串
print(s121)

#format的三种玩法,格式化输出
s = '我叫{},今年{},爱好{},再说一下我叫{}'.format('name',25,'test','name')
print(s)
s1 = '我叫{0},今年{1},爱好{2},再说一下我叫{0}'.format('name',25,'test')
print(s1)
s2 = '我叫{name},今年{age},爱好{hobby},再说一下我叫{name}'.format(name='name',age=25,hobby='test')
print(s2)

#替换
s = '你说什么就是什么好的哈东西南北东'
s1 = s.replace('就是','好的哈',1)   #替换字符串中的第一个就是为好的哈
print(s1)


#is系列
name = 'jjjjoa234'
print(name.isalnum())    #判断字符串是否有字母或数字组成
print(name.isalpha())   #判断字符串是否有字母组成
print(name.isdigit())   #判断字符串是否有数字组成


#for循环
s = 'fhdsklfds'
for i in s:
    print(i)

三、字典操作

字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

语法:

info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}

字典的特性:

  dict是无序的

  key必须是唯一的,天生去重

#dict:
'''
#数据类型划分:可变数据类型,不可变数据类型
不可变数据类型:元祖、bool、数字、str      可哈希
可变数据类型:列表、字典 、集合       不可哈希
字典的key必须是不可变数据类型,可哈希
字典的值value可以是任意数据类型
字典的优势:
    1、二分查找去查询
    2、存储大量的关系型数据
    特点:无序的
'''
dic = {
    'name':'张三',
    'age':25,
    'sex':''
}
#字典增加
dic['high'] = 185 #若原字典有high这个key,则会修改原有的值
dic['age'] = 20
dic.setdefault('weight',140)  #添加元素,默认值是none
print(dic)

#字典删除
dic.pop('weight')    #删除key为weight的键值对,是有返回值的,返回值为键值对的值,如果需删除的key在字典中没有,则会报错
dic.pop('二哥','没有此键')   #如果添加一个值则就算字典中没有二哥这个key也不会报错
print(dic)

dic.popitem()    #随机删除一个键值,3.6版本之后从后往前删除
print(dic)

del dic['name']   #删除键值对
print(dic)
#dic.clear()    #清空字典

#字典修改
dic['age'] = 18  #对值的修改
print(dic)

dic = {
    'name':'张三',
    'age':25,
    'sex':''
}
dic2 = {
    'name':'张三',
    'age':25,
    'sex':'',
    'weight':140,
    'hight':180
}
dic2.update(dic)   #把dic更新到dic2,相同的键值对覆盖,没有的添加
print(dic2)

#字典查找
print(dic.keys())  #打印字典中的键为一个列表
print(dic.values()) #打印字典中的值为一个列表
print(dic.items())  #打印字典中的键值为一个元祖,所有元祖组成一个列表
for i in dic2:   #什么都不写,默认打印键的值
    print(i)
for i in dic.items():   #打印键值对
    print(i)
print(dic['name'])    #打印键对应的值

#字典嵌套
dic = {
    'name':['alex','wusir'],
    'py9':{
        'time':'1213',
        'xuefei':19800,
        'addr':'CBD'
    },
    'age':21,
}
dic['age'] = 56
dic['name'].append('ritian')
dic['name'][1] = dic['name'][1].upper()
dic['py9'].setdefault('女生',6)
print(dic)

四、集合操作

集合是一个无序的,不重复的数据组合,它的主要作用如下:

去重,把一个列表变成集合,就自动去重了

关系测试,测试两组数据之间的交集、差集、并集等关系

s = set([3,5,9,10])      #创建一个数值集合  
  
t = set("Hello")         #创建一个唯一字符的集合  


a = t | s          # t 和 s的并集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(项在t中,但不在s中)  
  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
  
   
  
基本操作:  
  
t.add('x')            # 添加一项  
  
s.update([10,37,42])  # 在s中添加多项  
  
   
  
使用remove()可以删除一项:  
  
t.remove('H')  
  
  
len(s)  
set 的长度  
  
x in s  
测试 x 是否是 s 的成员  
  
x not in s  
测试 x 是否不是 s 的成员  
  
s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中  
  
s.union(t)  
s | t  
返回一个新的 set 包含 s 和 t 中的每一个元素  
  
s.intersection(t)  
s & t  
返回一个新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一个新的 set 包含 s 中有但是 t 中没有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一个新的 set 包含 s 和 t 中不重复的元素  
  
s.copy()  
返回 set “s”的一个浅复制

五、文件操作

文件只读
mode = 'r'
f = open('模特主妇护士班主任.txt',mode='r',encoding='utf-8')    #打开文件
cont = f.read()     #读取文件
print(cont)
f.close()           #关闭文件

打开非文字的文件或上传下载可用rb模式,已bytes类型模式打开文件
f = open('模特主妇护士班主任.txt',mode='rb',)
cont = f.read()
print(cont)
f.close()


文件只写:对于写,没有此文件,则创建文件,如有文件则清空里边的内容后再添加需要写入的内容
mode = 'w'
f = open('log',mode='w',encoding='utf-8')
f.write('要的,好的哈 ,没问题')
f.close()

f = open('log',mode='wb')
f.write('要的,好的哈 ,没问题'.encode('utf-8'))   #使用wb时,在写的时候需要制定文件编码格式
f.close()

文件追加
f = open('log',mode='a',encoding='utf-8')  #默认光标在文件最后
# f.write('fujinkandao de ')
# f.close()
#
# f = open('log',mode='ab',)
# f.write('ceshi'.encode('utf-8'))
# f.close()

文件读写也有bytes类型mode='r+b'  ,只会读写,后边不会做操作
f = open('log',mode='a+',encoding='utf-8')
cont = f.read()
f.write("119.84.155.118,123.151.77.12,101.226.226.247,101.226.226.167,61.151.173.71,61.151.186.145,113.96.230.31,123.151.76.43,113.96.230.24,101.226.226.213,119.84.155.78,113.96.230.37,119.84.155.92,113.96.230.63,61.151.186.211,123.151.144.20,61.151.173.78,61.151.186.199,61.151.186.198")
f.write("119.84.155.118\n123.151.77.12\n101.226.226.247\n101.226.226.167\n61.151.173.71\n61.151.186.145\n113.96.230.31\n123.151.76.43\n113.96.230.24\n101.226.226.213\n119.84.155.78\n113.96.230.37\n119.84.155.92\n113.96.230.63\n61.151.186.211\n123.151.144.20\n61.151.173.78\n61.151.186.199\n61.151.186.198")
f.write("101.226.212.107\n180.97.117.100\n61.151.168.227\n180.97.117.108\n14.215.140.25\n14.215.140.24\n14.215.140.21\n183.61.38.193\n101.226.76.160\n61.151.168.141\n180.97.117.101\n113.96.232.48\n101.91.63.156\n183.61.38.202\n180.97.9.122\n101.91.63.158\n180.97.8.103\n61.151.183.44\n101.91.63.157\n101.226.90.145\n113.96.232.100\n183.3.233.232\n183.61.38.245\n113.96.232.105\n180.97.117.116\n180.97.9.11\n180.97.117.50\n183.36.108.166\n61.151.206.58\n14.215.140.53\n180.97.9.100\n14.17.41.196\n180.97.9.125\n180.97.9.124\n180.97.9.123\n183.36.108.188\n113.96.208.21\n113.96.208.23\n113.96.208.22")
f.write("61.151.182.237\n61.151.182.238\n61.151.173.26\n61.151.173.25\n61.151.182.236\n59.36.120.65\n61.151.182.235\n61.151.182.233\n61.151.182.234\n61.151.173.108\n61.151.172.55\n61.151.173.11\n183.3.255.181\n61.151.173.110\n61.151.172.165\n61.151.172.164\n183.3.255.179\n61.151.173.109\n61.151.172.163\n183.3.255.180")
f.write("119.84.152.100\n101.226.99.191\n183.61.37.191\n183.61.37.193\n14.215.152.171\n14.215.152.170\n123.151.65.110\n123.151.65.111\n123.151.65.112\n119.84.152.36\n123.151.93.77\n180.163.8.14\n123.151.179.102\n180.163.30.155\n180.163.30.156")
f.close()

文件写读(先清除再写,读的时候也只会从光标的位置读)
f = open('log',mode='w+',encoding='utf-8')
f.write('ceshiceshi')
f.seek(0)    #调整光标到最前面
cont = f.read()
print(cont)

文件追加(写读)
f = open('log',mode='a+',encoding='utf-8')
f.write('jiaqi')
f.seek(0)
print(f.read())
f.close()

功能详解
f = open('log',mode='r+',encoding='utf-8')
cont = f.read(3)   #打印前三个字符,读出来的都是字符
f.seek(6)      #seek是按照字节定光标的位置,中文一个字为三个字节
print(f.tell())   #查看现在光标所在的位置
cont = f.readable()   #判断文件是不是可读的返回true或false
cont = f.readline()    #一行一行的读,想读第二行
cont = f.readlines()    #多行读,把所有行读成列表,每行一个元素
f.truncate(5)    #对源文件截取前五位
for line in f:
    print(line)
f.close()
with open( 'log',mode='r+',encoding='utf-8') as f,open('模特主妇护士班主任.txt') as h: #用这种方法可以不用在文件操作后边写关闭文件,且可以同时打开多个
    print(f.read())
    print(h.read())read

import os
os.remove('log')    # 删除文件
os.rename('模特主妇护士班主任.txt','log1')   #修改文件名

with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log',mode='r',encoding='utf-8') as f:
    #通过对文件句柄f的操作来操作文件

猜你喜欢

转载自www.cnblogs.com/hackerlin/p/10820452.html
今日推荐