Python 中的tips总结
1、需要同时使用索引与value的for:
list_1 = [1, 3, 5]
for i, value in enumerate(list_1):print iprint value
2、只需要使用索引计数的for循环(联想c++)
for i in range(1,5):print(i)
python3中range与xrange合并,取消了Python2中range的实现,xrange重命名为range,节省空间。
3、[表达式(i) for i in range(n)] ===>生成一个与range(n)相同length的新list
4、通过 : 访问list中的一部分元素能防止越界
import numpy as npa = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
length = int(np.ceil(len(a) / 3))
b = [a[i:i+length] for i in range(0, len(a), length)]
print(a)
print(a[1:14])
print(length)
print(b)
运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[2, 3, 4, 5, 6, 7, 8, 9, 10]
4
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]
5、对Python元组的理解:类似c++中的const类型,不可修改,比如numpy.shape()返回的都是元组类型。
6、python中的view、shallow copy与deep copy
a、view
view是对原内容的引用,不占用新的内存,如numpy中array的slice操作
b、shallow copy
python中切片的浅拷贝探究-Python学习网
拷贝原对象A本身得到新对象C,但是如果对象A内部引用了对象B,则C也只拷贝B对象的引用,不会对对象B的内存做完整拷贝。如List的slice操作。
综合a、b,numpy比list的slice操作更高效,因为没有任何内存拷贝操作。
c、deep copy
(1)不用copy模块时,对于list对象,list[:]代表深度copy
(2)用copy模块时,简单的object,copy与deepcopy的效果一样,但是如果时list中嵌套list这种复杂的object效果就不一样了,详情见代码。
#/usr/bin/env python
import copydef copy1(value):list4 = [1, 2, 3, 4, 5]value[:] = [list4[i] for i in range(len(list4))]list4.append(6)print('value id is: {}'.format(id(value)))print('list4 id is: {}'.format(id(list4)))print('list4 is: {}'.format(list4))return valuedef copy2(value):list4 = [1, 2, 3, 4, 5]value = [list4[i] for i in range(len(list4))]list4.append(6)print('value id is: {}'.format(id(value)))print('list4 id is: {}'.format(id(list4)))print('list4 is: {}'.format(list4))return valueif __name__ == '__main__':print("=====================test for list normal deepcopy====================")list1 = [1, 2, 3, 5]list2 = []list3 = []print('init list1 id:', id(list1))print('init list2 id:', id(list2))print('init list3 id:', id(list3))list2[:] = list1list3 = list1list1.append(6)print('list1 value is:', list1)print('list2 value is:', list2)print('list3 value is:', list3)print('final list1 id:', id(list1))print('final list2 id:', id(list2))print('final list3 id:', id(list3))print("=====================test for function param deepcopy====================")list5 = []value = copy1(list5)print('copy1 list5 is: {}'.format(list5))print('copy1 value is: {}'.format(value))print('copy1 value id is: {}'.format(id(value)))print('copy1 list5 id is: {}'.format(id(list5)))print("=====================test for function param shallowcopy====================")list6 = []value = copy2(list6)print('copy2 list6 is: {}'.format(list6))print('copy2 value is: {}'.format(value))print('copy2 value id is: {}'.format(id(value)))print('copy2 list6 id is: {}'.format(id(list6)))print("=====================test1 for python deepcopy module====================")origin = [2, 3, 5]cop0 = origincop1 = copy.copy(origin)cop2 = copy.deepcopy(origin)origin.append(7)print('origin is', origin)print('cop0 is {}'.format(cop0))print('cop1 is {}'.format(cop1))print('cop2 is {}'.format(cop2))print('origin id is {}'.format(id(origin)))print('cop0 id is {}'.format(id(cop0)))print('cop1 id is {}'.format(id(cop1)))print('cop2 id is {}'.format(id(cop2)))print("=====================test2 for python deepcopy module====================")origin1 = [2, 3, 5, [3, 6]]cop00 = origin1cop11 = copy.copy(origin1)cop22 = copy.deepcopy(origin1)origin1[3].append(7)print('origin1 is', origin1)print('cop00 is {}'.format(cop00))print('cop11 is {}'.format(cop11))print('cop22 is {}'.format(cop22))print('origin1 id is {}'.format(id(origin1)))print('cop00 id is {}'.format(id(cop00)))print('cop11 id is {}'.format(id(cop11)))print('cop22 id is {}'.format(id(cop22)))print('origin1: [3] id is {}'.format(id(origin1[3])))print('cop00: [3] id is {}'.format(id(cop00[3])))print('cop11: [3] id is {}'.format(id(cop11[3])))print('cop22: [3] id is {}'.format(id(cop22[3])))
运行结果:
=====================test for list normal deepcopy====================
init list1 id: 139778396823048
init list2 id: 139778396823240
init list3 id: 139778396419080
list1 value is: [1, 2, 3, 5, 6]
list2 value is: [1, 2, 3, 5]
list3 value is: [1, 2, 3, 5, 6]
final list1 id: 139778396823048
final list2 id: 139778396823240
final list3 id: 139778396823048
=====================test for function param deepcopy====================
value id is: 139778396419080
list4 id is: 139778396419016
list4 is: [1, 2, 3, 4, 5, 6]
copy1 list5 is: [1, 2, 3, 4, 5]
copy1 value is: [1, 2, 3, 4, 5]
copy1 value id is: 139778396419080
copy1 list5 id is: 139778396419080
=====================test for function param shallowcopy====================
value id is: 139778396418888
list4 id is: 139778396418952
list4 is: [1, 2, 3, 4, 5, 6]
copy2 list6 is: []
copy2 value is: [1, 2, 3, 4, 5]
copy2 value id is: 139778396418888
copy2 list6 id is: 139778396419016
=====================test1 for python deepcopy module====================
origin is [2, 3, 5, 7]
cop0 is [2, 3, 5, 7]
cop1 is [2, 3, 5]
cop2 is [2, 3, 5]
origin id is 139778396418952
cop0 id is 139778396418952
cop1 id is 139778396418824
cop2 id is 139778396418760
=====================test2 for python deepcopy module====================
origin1 is [2, 3, 5, [3, 6, 7]]
cop00 is [2, 3, 5, [3, 6, 7]]
cop11 is [2, 3, 5, [3, 6, 7]]
cop22 is [2, 3, 5, [3, 6]]
origin1 id is 139778396418632
cop00 id is 139778396418632
cop11 id is 139778396418504
cop22 id is 139778396418440
origin1: [3] id is 139778396418696
cop00: [3] id is 139778396418696
cop11: [3] id is 139778396418696
cop22: [3] id is 139778396418376
7、zip和izip函数
Python三中无izip。
8、Python中的单、双、三引号
参考文章:Python中单引号,双引号,3个单引号及3个双引号的区别_邓无邪的博客-CSDN博客
str4_ = "We all know that 'A' and 'B' are two capital letters."
str5 = 'The teacher said: "Practice makes perfect" is a very famous proverb.'
>>> str1 = "List of name:\
... Hua Li\
... Chao Deng"
>>> print(str1)
List of name: Hua Li Chao Deng>>> str1 = """List of name:
... Hua Li
... Chao Deng
... """
>>> print(str1)
List of name:
Hua Li
Chao Deng>>> str1 = """
... List of name:
... Hua Li # LiHua
... Chao Deng # DengChao
... """
>>> print(str1)List of name:
Hua Li # LiHua
Chao Deng # DengChao
9、os.rm_dir() 删除空目录
os.remove() 删除具体文件
shutil.rmtree() 删除整个目录树
10、读写json
python读写json文件 - Bigberg - 博客园
json的数据结构对应的是python中的dict,因此写入和读出时都是json的格式。
读json方法:
with open("../config/record.json",'r') as load_f:load_dict = json.load(load_f)print(load_dict)
写json方法:
with open("../config/record.json","w") as dump_f:json.dump(load_dict,dump_f)
11、python topN 取 最大的N个数 或 最小的N个数
import numpy as npa = np.array([1,4,3,5,2])
b = np.argsort(a)
print(b)结果:[0 4 2 1 3] 如果既要得到位置,也要得到值,可以如下:sortLoc = np.argsort(predicted_vector)
sortVal = np.sort(predicted_vector)
import heapq
nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums)) # Prints [42, 37, 23]
print(heapq.nsmallest(3, nums)) # Prints [-4, 1, 2]
12、处理大量数据中打印省略的问题
对于Numpy数据:在输出print()位置前加入:
1 np.set_printoptions(threshold=np.inf)
pandas数据:分为行列的设置:
复制代码
1 #显示所有列
2 pd.set_option('display.max_columns', None)
3 #显示所有行
4 pd.set_option('display.max_rows', None)
5 #设置value的显示长度为100,默认为50
6 pd.set_option('max_colwidth',100)项目中使用的方式:1 pd.set_option('display.max_columns', 1000000) # 可以在大数据量下,没有省略号
2 pd.set_option('display.max_rows', 1000000)
3 pd.set_option('display.max_colwidth', 1000000)
4 pd.set_option('display.width', 1000000)
13、Numpy数据类型转换astype,dtype
1、查看数据类型
In [11]: arr = np.array([1,2,3,4,5])In [12]: arr
Out[12]: array([1, 2, 3, 4, 5])// 该命令查看数据类型
In [13]: arr.dtype
Out[13]: dtype('int64')In [14]: float_arr = arr.astype(np.float64)// 该命令查看数据类型
In [15]: float_arr.dtype
Out[15]: dtype('float64')2、转换数据类型
// 如果将浮点数转换为整数,则小数部分会被截断
In [7]: arr2 = np.array([1.1, 2.2, 3.3, 4.4, 5.3221])In [8]: arr2
Out[8]: array([ 1.1 , 2.2 , 3.3 , 4.4 , 5.3221])// 查看当前数据类型
In [9]: arr2.dtype
Out[9]: dtype('float64')// 转换数据类型 float -> int
In [10]: arr2.astype(np.int32)
Out[10]: array([1, 2, 3, 4, 5], dtype=int32)3、字符串数组转换为数值型
In [4]: numeric_strings = np.array(['1.2','2.3','3.2141'], dtype=np.string_)In [5]: numeric_strings
Out[5]: array(['1.2', '2.3', '3.2141'], dtype='|S6')// 此处写的是float 而不是np.float64, Numpy很聪明,会将python类型映射到等价的dtype上
In [6]: numeric_strings.astype(float)
Out[6]: array([ 1.2, 2.3, 3.2141])
14、hypot()
math.hypot(x, y)np.hypot(x,y)
15、指定特定版本的Python(shebang的使用)
python - 如何告诉根进程使用anaconda python安装而不是/usr/bin/python? - IT工具网
16、中文编码指定使用utf-8
Python 中文编码 | 菜鸟教程21、Python可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)的概念
一文彻底搞懂Python可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)的概念 - 掘金在Python中可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)这几个概念是经常用到的,初学时对这几个概念也是经常混淆,现在是时候把这几个概念搞清楚了。 记住这个类,下文我们还会看到这个类的定义。 在类中定义了__iter__()方法的对象,…https://juejin.cn/post/6844903834381189127
22、matplotlib画图增加button、event回调函数
Python结合matplotlib添加按钮Button_EGNIR的博客-CSDN博客_matplotlib 按钮之前找matplotlib的按钮的资料,找了很久才找到可以看懂的,不知道是不是太简单了,所以才没什么人写。第一行buttonaxe = plt.axes([0.94, 0.03, 0.03, 0.03])用来设置按钮的位置。第一个为水平的值,第二个为竖直的值,后面两个表示按钮的大小第二行button1 = Button(buttonaxe, 'p2',color='khaki', hovercolor='yellow')用来创建按钮,并设置颜色以及鼠标放在按钮上时按钮的颜色。第三行button1.onhttps://blog.csdn.net/weixin_46477226/article/details/106398193事件处理及拾取 · Matplotlib 用户指南https://wizardforcel.gitbooks.io/matplotlib-user-guide/content/7.3.html(原)python中matplot中获得鼠标点击的位置及显示灰度图像 - darkknightzh - 博客园转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6182474.html 参考网址: http://matplotlib.org/examples/pylhttps://www.cnblogs.com/darkknightzh/p/6182474.htmlCapturing mouse click events with Python and OpenCV - PyImageSearchhttps://www.pyimagesearch.com/2015/03/09/capturing-mouse-click-events-with-python-and-opencv/Handle mouse events in Python - OpenCV - GeeksforGeekshttps://www.geeksforgeeks.org/handle-mouse-events-in-python-opencv/
Python 中的tips总结相关推荐
- python中append函数合并列表且列表内数字从高到低_35个高级Python知识点总结
No.1 一切皆对象 众所周知,Java中强调"一切皆对象",但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function) ...
- python对excel某一列去重-python中怎么对dataframe列去重
python中对已经生成的Series,怎样组合成DataFrame 如 a = Series([1,2,3]) b = Series([2,3,4]) 怎样将a b组合成一个DataFzip函数接受 ...
- Python中re(正则表达式)模块函数学习
2019独角兽企业重金招聘Python工程师标准>>> Python正则表达式指南 今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的 ...
- python应用中调用spark_在python中使用pyspark读写Hive数据操作
1.读Hive表数据 pyspark读取hive数据非常简单,因为它有专门的接口来读取,完全不需要像hbase那样,需要做很多配置,pyspark提供的操作hive的接口,使得程序可以直接使用SQL语 ...
- python和revit_如何在Python中产生新的RevitAPI对象
通过Python节点可以调用RevitAPI的内容,那如何产生新的对象? 一.公开构造函数的类 通过查看RevitAPI可以看到:对于XYZ类给出了公开的API构造函数,如下图所示: (Tips:类的 ...
- 解惑(三)----- 深入理解Python中的self参数和__init__(self)方法--通过类比Java语言
一.前言 在这里我想通过用Python和Java语言的类比来对Python中的self参数和__init__(self)方法做一个深入的解释.这样可以加深对self参数和__init__(self)方 ...
- 在Python中有效使用JSON的4个技巧
Python has two data types that, together, form the perfect tool for working with JSON: dictionaries ...
- Python 中 with 用法详解
浅谈 Python 的 with 语句:https://developer.ibm.com/zh/articles/os-cn-pythonwith/ python3,浅谈with的神奇魔法:http ...
- python iterable对象_如何理解Python中的iterable对象
转载请注明出处:https://www.jianshu.com/u/5e6f798c903a [^*] 表示注脚,在文末可以查看对应连接,但简书不支持该语法. 首先,容器和 iterable 间没有必 ...
最新文章
- [node 工具] 用 Node.js 将 bugzilla 上的 bug 列表导入到 excel 表格在线版本之一(server 端)...
- YOLOv5-Lite 使用笔记
- ScriptManager控件声明的各个部分
- matlab调用python函数未定义函数类_从零学习Python—调用函数def用法(下)
- 让数组的左边全为奇数C语言,2015年全国计算机等级考试全真模拟考场_二级C语言试卷四.docx...
- Linux 终端操作之简明疾速指南(1)
- beyond compare类似软件_你用过最好用的截图软件是哪一款
- 看到别人的简历,mark一下。
- NBIOT(3)---NBIOT 移远BC28模块+stm32
- maven环境、本地仓储配置(下载安装)idea配置maven
- 为什么有的计算机没有ppt,电脑上没有ppt怎么办
- appium 切换上下文的时候报错
- 通讯录版本1.0到3.0简易版
- 电商直播风暴来了,AI虚拟偶像彻底革命李佳琦、薇娅?
- Java网络象棋游戏(功能版)
- JavaScript系列文章:变量提升和函数提升
- C语言 程序 素数圈圈
- win7系统提示计算机内存不足,Win7系统下提示内存不足的原因及解决方法
- css3动画动一次就停止,css - 在最后一帧停止CSS3动画
- python 大众 同城