Python学习笔记

一、小知识点

1.1 Python中ASCII码的数字和字符的转换

将ASCII字符转换为对应的数值即‘a’–>65,使用ord函数,ord(‘a’)
反正,使用chr函数,将数值转换为对应的ASCII字符,chr(65)

1.2 找出list中最大或者最小几个数的索引

import heapq	#导入heapq包

nums = [1,8,2,23,7,-4,18,23,24,37,2]
result = map(nums.index, heapq.nlargest(3, nums))
temp=[]
Inf = 0
for i in range(3):
    temp.append(nums.index(max(nums)))
    nums[nums.index(max(nums))]=Inf		# 将每次的最大值置0;改变了原数组
result.sort()
temp.sort()
print(result)
print(temp)

如上,有result和temp两种求法,上面代码输出:

[3, 8, 9]
[3, 8, 9]

上述是没问题的。
但是把nums改一下(list中有相同数值):

nums = [1,8,2,23,7,-4,18,23,23,37,2]
[3, 3, 9]
[3, 7, 9]

发现问题了吧,result方法发现相同数字永远会返回第一次出现的索引。

1.3 json与str转换

str转json

str转换为json格式,前提一定需要保证这个str的格式和json是一致的,即左边最外层是大括号,右边的最外层是大括号。如果不一致,推荐用正则进行拆分至和json格式一致
1. 通过json.loads进行转换

import json
str = '{"key": "wwww", "word": "qqqq"}'
j = json.loads(str)
print(j)
print(type(j))

但是值得注意的是,json中内部数据需要用双引号来包围,不能使用单引号,如刚才的写法,如果写成这样,就会发生错误:

str = "{'key': 'wwww', 'word': 'qqqq'}"
j = json.loads(str)

2. 通过eval
eval函数的官方解释为:将字符串str当成有效的表达式来求值并返回计算结果。
即通过eval可以把list,tuple,dict和string相互转化,例如:

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
 
b = eval(a)
 
type(b)
list
 
a = "{1: 'a', 2: 'b'}"
 
b = eval(a)
 
type(b)
dict 
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
 
b = eval(a)
 
type(b)
tuple

同样,值得注意的是,eval()可以通过运行系统的命令,如:

eval("__import__('os').startfile('notepad.exe')") #启动记事本程序

那么为了保证安全,当需要用户输入时,可以对用户输入进行敏感字符检查和过滤

3. literal_eval
和eval用法相同,都可以将字符串str解析成list,tuple,dict,而且避免了eval的安全性的问题

import ast 

a = "{1: 'a', 2: 'b'}"
b = ast.literal_eval(a)
type(b)
dict

json转str
使用json.dumps的方法,可以将json对象转化为字符串

data = {"name":"wjp","age":"22"}
data = json.dumps(data)

1.4 from future import * 的作用

我们在读代码的时候,总是会看到代码开头会加上from future import *这样的语句。这样的做法的作用就是将新版本的特性引进当前版本中,也就是说我们可以在当前版本使用新版本的一些特性。则该特性将会被默认禁用。
可参考文章:https://blog.csdn.net/zzc15806/article/details/81133045

1.5 enumerate()

描述
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
语法

enumerate(sequence, [start=0])

参数

  • sequence – 一个序列、迭代器或其他支持迭代对象。
  • start --下标起始位置,序号的起始位置、而非数据的起始坐标。

例子

a = np.ones((3, 2, 2))
print(a)
for i, data in enumerate(a, start=2):
    print(i)
    data[0, 0] = 4
print(a)
"""
[[[1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]]]
2
3
4
[[[4. 1.]
  [1. 1.]]

 [[4. 1.]
  [1. 1.]]

 [[4. 1.]
  [1. 1.]]]
  """

其他
如上述例子中,改变for循环中的data(因为for中的变量与原变量共用同一数据内存),则原数据也会随之改变。

1.6 argparse基本用法

描述
argparse 是python自带的命令行参数解析包,可以用来方便地读取命令行参数.
参考文章

  1. https://blog.csdn.net/yy_diego/article/details/82851661

二、numpy

1、ndarray与array的区别

1、numpy的核心是ndarray,然后,ndarray本质是数组。
2、np.array只是一个便捷的函数,用来创建一个ndarray,它本身不是一个类;你也能够用np.ndarray来创建,但这不是推荐的方式。

2、矩阵相乘

1、叉乘:矩阵中对应元素相乘,不相加;;符号:* 或 np.multiply(x, y)
2、点乘:矩阵相乘。符号: np.dot(x, y)
3、注意:当矩阵为mat而非array格式时,“*” 则变为矩阵相乘,但矩阵一般为array。

3、创建矩阵时出现data type not understood

问:如何使用Python产生一个数组,数组的长度为1024,数组的元素全为0?

答:使用zeros(1024) 即可实现!

问:如何产生一个2×1024的全0矩阵呢?是否是zeros(2,1024) ?

答:若是上述这种写法就会出现 TypeError: data type not understood 这种错误;
正确的写法是 zeros((2,1024)),python的二维数据表示要用二层括号来进行表示。同理,三维数据需要使用三层括号。

总结:使用np创建矩阵时,n维数组就要有n层括号。

Error:

1、TypeError: only size-1 arrays can be converted to Python scalars

解决办法:对于numpy的matrix还是调用numpy.的方法比较好,例如:1)int,最好使用np.int;2)寻找多维数组的最大值、最小值亦是如此,最好使用np.max、np.min

2、寻找最大值

三、matplotlib

3.1 设置x、y坐标轴等比例显示

# 有以下两种方法
# 第一种:
plt.gca().set_aspect('equal', adjustable='box')
# 第二种:
plt.axis('scaled')

3.2 绘制三维图

可参考:https://blog.csdn.net/u014636245/article/details/82799573

三、出现的一些error

1、使用argparse包存在的问题及解决

参考文章:
jupyter notebook:使用argparse包存在的问题及解决

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值