m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
#5.求m,n中矩阵各个元素的乘积 我想说这真是干货 反正我是会了 不知道看博客的各位了 你们要是不会 我想说 怪我表达能力 我可以语言 文字有点难
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
#通过下标获取各个元素
#通过for循环的方法
for i in range(len(m)):
#获取 m 列表的下标[[1,2,3]-->1 [4,5,6]-->2 [7,8,9]-->3 ] 为 1 2 3
for j in range(len(m[i])): #这个是获取 嵌套列表里面的下标
print(m[i][j]*n[i][j],end=' ') # end=' ' 表示 不换行
#打印为:2 4 6 12 15 18 28 32 36
#通过推导的方法
s=[m[i][j]*n[i][j] for i in range(len(m)) for j in range(len(m[i]))]
print(s,end=' ')
#打印为:[2, 4, 6, 12, 15, 18, 28, 32, 36]
#另一种方法: 这种方法和上面的大同小异 推导 套 推导 row 行 col 列
s1=[[m[row][col]*n[row][col] for col in range(len(m[row]))] for row in range(len(m))]
print(s1)
#打印为: [[2, 4, 6], [12, 15, 18], [28, 32, 36]] 是这个样子 我相信大家是可以看懂的
#就是先把大列表的下标循环一次 然后循环嵌套列表里面的三次
#6.结合两个列表的元素,如果元素之间不相等的话
a=[1,2,3]
b=[4,2,6]
c=[6,8,2]
#6.结合两个列表的元素,如果元素之间不相等的话 很简单
a=[1,2,3]
b=[4,2,6]
c=[6,8,2]
#用for循环遍历
for i in a:
for j in b:
for k in c:
if i!=j and i!=k and j!=k: #判断 不相等
print((i,j,k),end=' ')
#打印为:(1, 4, 6) (1, 4, 8) (1, 4, 2) (1, 2, 6) (1, 2, 8) (1, 6, 8) (1, 6, 2) (2, 4, 6) (2, 4, 8) (2, 6, 8)
# (3, 4, 6) (3, 4, 8) (3, 4, 2) (3, 2, 6) (3, 2, 8) (3, 6, 8) (3, 6, 2)
print([(i,j,k) for i in a for j in b for k in c if i!=j and i!=k and j!=k]) #用推导 建议使用推导 因为简单
#打印为:[(1, 4, 6), (1, 4, 8), (1, 4, 2), (1, 2, 6), (1, 2, 8), (1, 6, 8), (1, 6, 2), (2, 4, 6),
# (2, 4, 8), (2, 6, 8), (3, 4, 6), (3, 4, 8), (3, 4, 2), (3, 2, 6), (3, 2, 8), (3, 6, 8), (3, 6, 2)]
#它其实就这么简单 不要想复杂 你看过后就想说 要这么简单么 过分
枚 举 : 了解一下
1. 首先你得导入 enum 模块 from enum import Enum
2. 枚举定义用 class 关键字, 继承Enum类。 语法: class 类名 (Enum)
3. 用于定义枚举的class和定义类的class是有区别
from enum import Enum # 首先你得导入模块
class color(Enum): # 这里你需要继承 我们创建的是一个color的枚举
'''
对于一些既定的值 不允许随意赋值的量
每个成员的数据类型 就是它所属的枚举
自定义的类\枚举 又叫自定义数据类型
'''
red = 1 #我们创建了七个枚举类型
green = 2 #每一个成员都有它们各自名称和值,Color.green成员的名称是:green,值是:1。
orange = 3
yellow = 4
blue = 5
gray = 6
black = 7
4. 定义枚举时,成员名称不允许重复 重复会报错
from enum import Enum
class Color(Enum):
red = 1
red = 2 #你要是这样就会报错 代码无法执行
5. 默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名,如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员.
from enum import Enum
class Color(Enum):
red = 1
new_red = 1
print(Color(1))
#打印为 : Color.red 这是有顺序的 如果
new_red =1
red =1 是这个样子 那么打印出来的 是Color.new_red
6.如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
from enum import Enum, unique # 模块需要导入 记住
@unique #装饰器 应该写在这 注意
class Color(Enum):
red = 1
new_red = 1
print(Color(1))
注: 如果在进行打印 会报错
7.枚举取值
7.1 通过成员的名称来获取成员
7.2 通过成员值来获取成员
7.3 通过成员,来获取它的名称和值
from enum import Enum
class Color(Enum):
red = 1
green = 2
orange = 3
#通过成员的名称来获取成员 格式为: 类名[' 输入枚举成员名称 ']
print(Color['red'])
# 打印为 :Color.red
#通过成员值来获取成员 格式为: 类名( 输入枚举成员值 )
print(Color(2))
# 打印为 :Color.green
#通过成员,来获取它的名称和值
col=Color['orange']
print('枚举数据 的名字: ',col.name)
print('枚举数据的值 : ',col.value)
#打印为 :枚举数据 的名字: orange
#打印为; 枚举数据的值 : 3
8. 枚举支持迭代器,可以遍历枚举成员, 如果枚举有值重复的成员,循环遍历枚举时
只获取值重复成员的第一个成员
from enum import Enum
class color(Enum):
red = 1
new_red = 1
green = 2
orange = 3
yellow = 4
blue = 5
gray = 6
black = 7
for i in color:
print(i,end=' ')
# 打印为: color.red color.green color.orange color.yellow color.blue color.gray color.black
注 : 如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__
from enum import Enum
class color(Enum):
red = 1
new_red = 1
green = 2
orange = 3
for i in color.__members__.items():
print(i,end=' ')
# 打印为:('red', <color.red: 1>) ('new_red', <color.red: 1>) ('green', <color.green: 2>) ('orange', <color.orange: 3>)
9. 枚举比较
枚举成员可进行同一性比较 用 is is not 返回值为 True 或 False
from enum import Enum
class color(Enum):
red = 1
new_red = 1
green = 2
orange = 3
print(color.red is color.red) #打印为: True
print(color.red is not color.red) #打印为: False
print(color.red is color.green) #打印为: False
print(color.red is not color.green) #打印为: True
枚举成员可进等值比较 用 == 返回值为 True 或 False
from enum import Enum
class color(Enum):
red = 1
new_red = 1
green = 2
orange = 3
print(color.red == color.red) #打印为: True
print(color.red == color.green) #打印为: False
枚举成员不能进行大小比较
from enum import Enum
class color(Enum):
red = 1
new_red = 1
green = 2
orange = 3
print(color.red > color.green) #这样会报错 成员不能比较大小
# 下面这种是 进行值比较大小 可以进行 返回值为 False True
print(int(color.red.value) > int(color.red.value)) #打印为 False
print(int(color.red.value) < int(color.green.value))#打印为 True
Python 文件流
Python提供了必要的函数和方法进行默认情况下的文件基本操作。
1.open函数 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅
助方法才可以调用它进行读写。
语法: file object = open(file_name [, access_mode] [, buffering])
各个参数所代表的的含义:
file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后 。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结 尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式 。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。 如果该文件不存在,创建新文件用于读写。 |
buffering: 如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
File对象的属性
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:
1.file.name 返回文件的名称。
2.file.mode 返回被打开文件的访问模式。
3.file.closed 如果文件已被关闭返回true,否则返回false。
让我们来个例子证明上面所述:
file = open('foo.txt','a+') # myfile=open("路径",'打开方式')
print("文件名: ",file.name)
print("是否已关闭 : ",file.closed)
print("访问模式 : ",file.mode)
#输出为:
#文件名: foo.txt
#是否已关闭 : False
#访问模式 : a+
close()方法
close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
当一个文件对象的引用被重新指定给另一个文件时,Python会关闭之前的文件。用close()方法关闭文件是一个很好的习惯。
语法: fileObject.close()
file = open('foo.txt','a+')
file.close()
print("是否已关闭 : ",file.closed)
#输出为
#打印为: 是否已关闭 : True 文件已经关闭
write()方法
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
write()方法在字符串的结尾时应手动添加换行符('\n')
file = open('foo.txt','a+')
print("文件名: ",file.name)
print("是否已关闭 : ",file.closed)
print("访问模式 : ",file.mode)
file.write('Python is a great language.\nYeah its great!!\n')
# 运行的时候直接添加到创建的文件里面 运行几次 就添加几次
file.close()
file.write('Python is a great language.\nYeah its great!!\n')
#已经关闭文件,不能再往里面写 运行时会报错
print("是否已关闭 : ",file.closed)
#输出为
#文件名: foo.txt
#是否已关闭 : False
#访问模式 : a+
#打印为: 是否已关闭 : True 文件已经关闭
read()方法
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
语法: fileObject.read([count])
括号里面的内容代表可选参数 什么都不填表示读取全部 添加表示读取到第几个字节
file = open('new.txt','r+')
#file.write('Python is a great language.\nYeah its great!!\n')
str=file.read()
print('读取到的数据: ',str)
'''
输出为
读取到的数据: Python is a great language.
Yeah its great!!
会读取到全部文件 但不会读取到换行符
'''
str=file.read(6) #括号里面输入多少 则打印多少个字节 如果输入的超过本身的字节 也不会报错
print('读取到的数据: ',str)
'''
输出为: 读取到的数据: Python
'''
tell()
tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后:
file = open('new.txt','r+')
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
'''
输出为:
读取到的数据: Python is 当前位置: 10
读取到的数据: a great la 当前位置: 20
'''
seek(offset [,from])
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
file = open('new.txt','r+')
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell(),)
file.seek(0,0)
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
file.seek(10,0)
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
file.seek(5,0)
str=file.read(10)
print('读取到的数据: ',str,'当前位置: ',file.tell())
'''
输出为:
读取到的数据: Python is 当前位置: 10
读取到的数据: Python is 当前位置: 10
读取到的数据: a great la 当前位置: 20
读取到的数据: n is a gre 当前位置: 15
重命名和删除文件
Python的 os模块 提供了帮你执行文件处理操作的方法,比如重命名和删除文件。要使用这个模块,你必须先导入它,然后可以调用相关的各种功能。
语法: impor os
rename()
rename()方法需要两个参数,当前的文件名和新文件名。
语法: os.rename(current_file_name, new_file_name)
import os
os.rename('foo.txt','new_foo.txt')
remove()
remove()方法删除文件,需要提供要删除的文件名作为参数
import os
os.remove('new_foo.txt')
mkdir()
mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。
import os
os.mkdir('new_file')
chdir()
chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。
import os
print('当前目录: ',os.getcwd())
os.chdir('./new_file') # . 点代表当前目录
print('当前目录: ',os.getcwd())
'''
输出为:
当前目录: D:\python07\python高级
当前目录: D:\python07\python高级\new_file
'''
rmdir()
rmdir()方法删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。
import os
os.rmdir('new_file/输入流') #这是逐级删除 / 表示分割