Python基础知识汇总

字典与字符串的转换,以及json文件的读写操作 

import json
d={"name":"Tony","Age":18}#<class 'dict'>
print(type(json.dumps(d)))#<class 'str'>

s='{"name":"Tony","Age":18}'#<class 'str'>
print(type(json.loads(s)))#<class 'dict'>

s1={"Name":"ChyiChin","Age":100}
f=open('1.json','w',encoding='utf-8')
json.dump(s1,f)#写入到1.json文件里
f.close()

f2=open('1.json','r',encoding='utf-8')
info=json.load(f2)#加载1.json文件内容
f2.close()
print(info)#{'Name': 'ChyiChin', 'Age': 100}

判断是否是质数(素数)

#判断是否是质数(一般领域对于正整数,如果用到2到n的平方根去整除,无法整除则为质数)
from math import sqrt
def is_prime(n):
    if n==1:return False
    for i in range(2,int(sqrt(n))+1):
        if n%i==0:return False
    return True
print(is_prime(2))

#注意缩进
i=2
while i<10:
    j=2
    while j<=i/j:
        #print("j=>",j)
        #print(i/j)
        if not(i%j):break#i%j==1,not,能被整除就跳出循环
        j=j+1
    if j>i/j:print(i,"是素数")
    i=i+1

#打印n内的质数
def print_primes(n):
    num=[]
    for i in range(2,n):
        for j in range(2,i):
            if i%j==0:break#能被整除则跳出循环
        else:num.append(i)#for..else..
    print(num)
print_primes(30)

#求区间内的质数,并统计个数
def primesnums(v1,v2):
    num=[]
    for i in range(v1,v2+1):
        for j in range(2,int(i/2+1)):
            if i%j==0:break
        else:num.append(i)
    return num
print("区间质数:",primesnums(2,100))
print("质数个数:",len(primesnums(2,100)))

列表,字典

#列表是方括号[],元组是圆括号(),字典是花括号{}
#遍历嵌套
num_list=[[1,2,33,7],[65,3,2]]
for i in num_list:
    for j in i:
        print(j)

list1=[2,3,3,34,9,10]
print(list1[1:4])#[3, 3, 34]
print(list1[:-1])#[:-1]从第一个遍历到倒数第二个元素[2, 3, 3, 34, 9]
print(list1[-1])#倒数第一个元素,10
print(list1[1:])#第二个元素开始截取[3, 3, 34, 9, 10]
print(max(list1),min(list1))#最大值和最小值
list1.insert(2,'中国')#在第二个索引位置插入对象[2, 3, '中国', 3, 34, 9, 10]
print(list1)
list1.extend([777,5])#扩展新的列表[2, 3, '中国', 3, 34, 9, 10, 777, 5]
print(list1)
print(list1.pop(2))#移除列表中的元素并返回该元素,中国
list1.reverse()
print(list1)#反转列表中元素[5, 777, 10, 9, 34, 3, 3, 2]
list1.sort()
print(list1)#排序[2, 3, 3, 5, 9, 10, 34, 777]


#5行三列,二维列表
list_2d=[['' for col in range(3)] for row in range(5)]
list_2d[1].append('厉害')
list_2d[1].append('了')
list_2d[3].append('我的')
list_2d[4].append('国')
print(list_2d)

#list1和list1[:]不一样
print(id(list1))
print(id(list1[:]))

#remove是按照内容删除,del是按照删除元素的位置
list1.remove(34)
print(list1)
print(len(list1))
del(list1[3])
print(list1)

#字典,键-区分大小写,值-可以是任意类型
dict={'name':'Tony',12.3:'数值也可以'}
print(dict[12.3])#数值也可以, 键值对,键是不可变
dict['Country']='China'
print(dict)#{'Country': 'China', 'name': 'Tony', 12.3: '数值也可以'}
dict['country']='USA'
print(dict)#{'Country': 'China', 'name': 'Tony', 12.3: '数值也可以', 'country': 'USA'}
del dict['Country']
print(dict)#{'country': 'USA', 12.3: '数值也可以', 'name': 'Tony'}
dict.clear()#清空
print(dict)
del dict#删除
dict1={'a':[12,3,22,34]}
print(dict1['a'][2])#22
dict2={'a':{'aa':'bb'}}
print(dict2['a']['aa'])#bb
#遍历字典
users={'Tony':{"Tall":173,"Weight":"70KG"},'ZhangSan':{'Tall':178,"Weight":"80KG"}}
for username,userinfo in users.items():
    print(username)
    print(str(userinfo["Tall"])+"-"+userinfo["Weight"])



#统计很常用,比如统计之后可以做不同的操作,比如删除指定重复次数的
#统计各个元素的个数
aa=[2,3,3,4,3,4,5,2,6,7,2,2,5,2]
num_aa=dict()
for i in aa:
    if i in num_aa:
        num_aa[i]+=1
    else:
        num_aa[i]=1
print(num_aa)
{2: 5, 3: 3, 4: 2, 5: 2, 6: 1, 7: 1}

#统计单个元素的个数
print(aa.count(2))#5
for i in np.arange(5):
    aa.remove(2)
print(aa)#[3, 3, 4, 3, 4, 5, 6, 7, 5]

#键值不存在时,实现值的初始化
dd=defaultdict(int)
for i in aa:
    dd[i]+=1
print(dd)#{3: 3, 4: 2, 5: 2, 6: 1, 7: 1})

文件内容的相关操作

# encoding:utf-8
import os

'''
文件内容的读取
Ctrl+Alt+L格式化代码
'''
f1 = open("1.json")
str0 = f1.read()
print(str0)

f2 = open("1.json")
str2 = f2.readline()
while str2:
    print(str2)
    str2 = f2.readline()
f2.close()

for i in open("1.json"):
    print(i)

fo = open("a.txt", "w")
fo.write("chon什么啊ao\n哈哈你好啊\n是")
fo.close()

f = open("a.txt", "r")
str = f.read(6)
print(str)

position = f.tell()
print(position)

f.seek(0, 1)
str1 = f.read()
print("hello"+str1)


'''
目录的新建删除改名
'''
os.rename("a.txt", "aa.txt")
os.remove("aa.txt")

os.mkdir("test")
os.chdir("test")
os.getcwd()
print(os.getcwd())
os.rmdir("../test")

print(os.defpath)

numpy

import numpy as np
s1=np.array([60,75,75,80,60]);#分数组1
s2=np.array([40,100,95,45,70]);#分数组2
s1_avg=np.mean(s1);#平均值,两者都是70
s2_avg=np.mean(s2);
print(np.sqrt(((s1-s1_avg)**2).sum()/(s1.size-1)))#9.354143466934854
print(np.sqrt(((s2-s2_avg)**2).sum()/(s2.size-1)))#27.613402542968153

上面这个是一个标准差的公式,\sqrt{(\sum_{i=0}^{N}(x_{i}-r)^{2})/(N-1)}[其中r是平均值],可以看出分数组2的标准差比较大,意味着离散程度很高,也就是说这个学生偏科偏的严重哈哈!当然在numpy库里面是有自带的标准差函数的,如下:

print(np.std(s1,ddof=1));
print(np.std(s2,ddof=1));

pickle文件(序列化对象到文件,做持久性的存储)

import pickle as pk
t1=('Tony','ChyiChin',123,['baidu.com','google'])
f1=open('t.pkl','wb')
pk.dump(t1,f1,True)
f1.close()

如果想存储在指定位置,需要进行路径转换,如: os.chdir('E:'),不然默认就是当前目录,当前目录在什么位置,os.getcwd()或os.path.abspath('.'),其中当前目录(.)和父级目录(..)也可以通过这样获得os.curdir和os.pardir

上面是将t.pkl文件存放在E盘,可以打开看下,现在将这个文件加载,还是可以还原成对象

f2=open('t.pkl','rb')
t2=pk.load(f2)
f2.close()
t2

 ('Tony', 'ChyiChin', 123, ['baidu.com', 'google'])

np.r_和np.c_,矩阵的连接作用

x1=np.array([[2,3,6],[11,22,33]])#(2,3)
x2=np.array([[1,2,3],[9,0,8]])#(2,3)

np.r_[x1,x2]#(4, 3)

array([[ 2,  3,  6],
       [11, 22, 33],
       [ 1,  2,  3],
       [ 9,  0,  8]])

np.c_[x1,x2]#(2, 6)

array([[ 2,  3,  6,  1,  2,  3],
       [11, 22, 33,  9,  0,  8]])

r_和c_不是方法,某些情况也可以使用np.concatenate方法来实现:

#np.r_等价于
np.concatenate((x1,x2))
'''
array([[ 2,  3,  6],
       [11, 22, 33],
       [ 1,  2,  3],
       [ 9,  0,  8]])
'''
默认为:np.concatenate((x1,x2),axis=0)

#np.c_等价于
np.concatenate((x1,x2),axis=1)
'''
array([[ 2,  3,  6,  1,  2,  3],
       [11, 22, 33,  9,  0,  8]])
'''

np.concatenate((x1,x2),axis=None)

'''
array([ 2,  3,  6, 11, 22, 33,  1,  2,  3,  9,  0,  8])
'''

r_和c_还可以返回matrix类型:

np.r_['r',[1,2,3], [4,5,6]]
'''
matrix([[1, 2, 3, 4, 5, 6]])
'''


np.r_['c',[1,2,3], [4,5,6]]
'''
matrix([[1],
        [2],
        [3],
        [4],
        [5],
        [6]])
'''


np.c_['r',[1,2,3], [4,5,6]]
'''
matrix([[1, 4],
        [2, 5],
        [3, 6]])
'''

np.pad填充

import numpy as np
a=[1,2,3,4,5]
说明:pad(array, pad_width, mode, **kwargs)
mode可以是字符与常量也可以是自定义函数

constant常量默认是0
np.pad(a,(2,3),'constant')#array([0, 0, 1, 2, 3, 4, 5, 0, 0, 0])
np.pad(a,(2,3),'constant',constant_values=(4,6))#array([4, 4, 1, 2, 3, 4, 5, 6, 6, 6])
np.pad(a,(2,3),'edge')#array([1, 1, 1, 2, 3, 4, 5, 5, 5, 5])
np.pad(a,(2,3),'maximum')#array([5, 5, 1, 2, 3, 4, 5, 5, 5, 5])
np.pad(a,(2,3),'mean')#array([3, 3, 1, 2, 3, 4, 5, 3, 3, 3])
np.pad(a,(2,3),'median')#array([3, 3, 1, 2, 3, 4, 5, 3, 3, 3])
np.pad(a,(2,3),'minimum')#array([1, 1, 1, 2, 3, 4, 5, 1, 1, 1])
了解更多查看帮助
help(np.pad)

zip函数

        zip(迭代对象...),将参数中的迭代对象打包成元组,然后返回由这些元组组成的列表,这里需要注意的是,在Python3.x版本以上,返回的是一个对象,需要用到的时候,进行list列表的转换

z_obj=zip([1,2,4],['a','bb','ccc'],[999,888,777])
z_list=list(z_obj)#python版本低于3.x不需要转换
z_list    #[(1, 'a', 999), (2, 'bb', 888), (4, 'ccc', 777)]


z=list(zip(*z_list))#反向操作
z    #[(1, 2, 4), ('a', 'bb', 'ccc'), (999, 888, 777)]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅恪光潜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值