python 常见细节知识点
1. a[::-1]翻转
设有一个元组或者列表
a = (1,2,3,4)
b = [1,2,3,4]
则a[::-1]和b[::-1]的含义是将元组或列表的内容翻转
a[::-1] # 结果为(4,3,2,1)
b[::-1] #结果为[4,3,2,1]
注意和a[:-1]的区别
a[:-1]表示从元组中切片,默认从第一个元素开始,到倒数第一个元素前面的那个元素为止
a[:-1] #结果为(1,2,3)
b[:-1] #结果为[1,2,3]
列表赋值y = x 相当于 指针传递;y = x[:]相当于 值传递
>>> a=[,,,,,,,,]
>>> print(a[::])
[, , , , ]
2.Python中a和a[:]有什么区别?
[]是引用 传址调用
[:] 是复制 传值调用
发现用b=a[:], 再给b赋值, 不会影响a; 直接给a[:]赋值却会影响a
a=5 b=a print(a,b) b=3 print(a,b) a=6 print(a,b) 5 5
5 3
6 3 c=[1,2,3,4] d=c print(c,d) c[0]=5 print(c,d) d[0]=6 print(c,d) [1, 2, 3, 4] [1, 2, 3, 4]
[5, 2, 3, 4] [5, 2, 3, 4]
[6, 2, 3, 4] [6, 2, 3, 4] c=[1,2,3,4] d=c[:] print(c,d) c[0]=5 print(c,d) d[0]=6 print(c,d) [1, 2, 3, 4] [1, 2, 3, 4]
[5, 2, 3, 4] [1, 2, 3, 4]
[5, 2, 3, 4] [6, 2, 3, 4] c=[1,2,[1,2,3],3,4] d=c[:] # 没有限制条件的分片表达式(L[:])能够复制序列,但此法只能浅层复制; 在有嵌套情况跟着一起变化 print(c,d) c[0]=5 c[2][0]=7 print(c,d) d[0]=6 print(c,d) [1, 2, [1, 2, 3], 3, 4] [1, 2, [1, 2, 3], 3, 4]
[5, 2, [7, 2, 3], 3, 4] [1, 2, [7, 2, 3], 3, 4]
[5, 2, [7, 2, 3], 3, 4] [6, 2, [7, 2, 3], 3, 4] import copy c=[1,2,3,4] d=copy.deepcopy(c) print(c,d) c[0]=5 print(c,d) d[0]=6 print(c,d) [1, 2, 3, 4] [1, 2, 3, 4]
[5, 2, 3, 4] [1, 2, 3, 4]
[5, 2, 3, 4] [6, 2, 3, 4] a = [0, [1, 2], 3] b = a[:] a[0] = 8 a[1][1] = 9 print(a,b) [8, [1, 9], 3] [0, [1, 9], 3] import copy a = [0, [1, 2], 3] b = copy.deepcopy(a) a[0] = 8 a[1][1] = 9 print(a,b) [8, [1, 9], 3] [0, [1, 2], 3]
3.Python中flatten,matrix.A用法
一、用在数组
- >>> a = [[1,3],[2,4],[3,5]]
- >>> a = array(a)
- >>> a.flatten()
- array([1, 3, 2, 4, 3, 5])
二、用在列表
如果直接用flatten函数会出错
- >>> a = [[1,3],[2,4],[3,5]]
- >>> a.flatten()
- Traceback (most recent call last):
- File "<pyshell#10>", line 1, in <module>
- a.flatten()
- AttributeError: 'list' object has no attribute 'flatten'
正确的用法
- >>> a = [[1,3],[2,4],[3,5],["abc","def"]]
- >>> a1 = [y for x in a for y in x]
- >>> a1
- [1, 3, 2, 4, 3, 5, 'abc', 'def']
或者(不理解)
- >>> a = [[1,3],[2,4],[3,5],["abc","def"]]
- >>> flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]
- >>> flatten(a)
- [1, 3, 2, 4, 3, 5, 'abc', 'def']
三、用在矩阵
- >>> a = [[1,3],[2,4],[3,5]]
- >>> a = mat(a)
- >>> y = a.flatten()
- >>> y
- matrix([[1, 3, 2, 4, 3, 5]])
- >>> y = a.flatten().A
- >>> y
- array([[1, 3, 2, 4, 3, 5]])
- >>> shape(y)
- (1, 6)
- >>> shape(y[0])
- (6,)
- >>> y = a.flatten().A[0]
- >>> y
- array([1, 3, 2, 4, 3, 5])
4.numpy.ravel() vs numpy.flatten()
首先声明两者所要实现的功能是一致的(将多维数组降位一维),两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵,而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。
1. 两者的功能
>>> x = np.array([[1, 2], [3, 4]])
>>> x
array([[1, 2],
[3, 4]])
>>> x.flatten()
array([1, 2, 3, 4])
>>> x.ravel()
array([1, 2, 3, 4])
两者默认均是行序优先
>>> x.flatten('F')
array([1, 3, 2, 4])
>>> x.ravel('F')
array([1, 3, 2, 4])
>>> x.reshape(-1)
array([1, 2, 3, 4])
>>> x.T.reshape(-1)
array([1, 3, 2, 4])
2. 两者的区别
>>> x = np.array([[1, 2], [3, 4]])
>>> x.flatten()[1] = 100
>>> x
array([[1, 2],
[3, 4]]) # flatten:返回的是拷贝
>>> x.ravel()[1] = 100
>>> x
array([[ 1, 100],
[ 3, 4]])
python-numpy的基本用法02数组的轴对换
#coding:utf-8
import numpy as np
arr = np.arange(15).reshape(3, 5)
print arr
print arr.T #转制
print np.dot(arr, arr.T) #矩阵乘法
print '*' * 50
arr = np.arange(16).reshape((2,2,4))
# [[[ 0 1 2 3]
# [ 4 5 6 7]]
#
# [[ 8 9 10 11]
# [12 13 14 15]]]
print arr[0] #二维数组
# [[0 1 2 3]
# [4 5 6 7]]
print arr[0][0] #[0 1 2 3]
print arr[0, 0] #[0 1 2 3]
print arr[[0],[0]] #[[0 1 2 3]]
print arr[0][0][0] #0
print arr.transpose((1,0,2))
# - a[0][0] = [0, 1, 2, 3]
# - a[0][1] = [4, 5, 6, 7]
# - a[1][0] = [8, 9, 10, 11]
# - a[1][1] = [12, 13, 14, 15]
# transpose的参数为坐标,正常顺序为(0, 1, 2, ... , n - 1),
# 现在传入的为(1, 0, 2)代表a[x][y][z] = a[y][x][z],第0个和第1个坐标互换。
# - a'[0][0] = a[0][0] = [0, 1, 2, 3]
# - a'[0][1] = a[1][0] = [8, 9, 10, 11]
# - a'[1][0] = a[0][1] = [4, 5, 6, 7]
# - a'[1][1] = a[1][1] = [12, 13, 14, 15]
# so,
# a'=
# [[[ 0 1 2 3]
# [ 8 9 10 11]]
#
# [[ 4 5 6 7]
# [12 13 14 15]]]
- 数组和元组之间的区别:数组内容是可以被修改的,而元组内容是只读的。
- Python自带的数据结构分为可变的和不可变的。可变的有:数组、集合、字典;不可变的有:字符串、元组、数。
1、python遍历文件夹
首先介绍python下的 glob 模块:可以很方便的在进行图像批处理时遍历文件夹下所有图像。
#coding:utf-8
import glob as gb #导入glob模块
import cv2
# 返回该路径下所有的 jpg 文件的路径
img_path = gb.glob("/Users/steven/PycharmProjects/AI/RPN/*.jpg")
for path in img_path:
img = cv2.imread(path)
# 处理图像
cv2.imshow("img", img)
cv2.waitKey(1000)
这样就实现了文件夹下指定类型文件的遍历。但仅仅实现遍历功能一般并不能满足我们的要求,我们可能需要对一个文件夹下的图像批进行处理,再将处理后的图像按照原来的名称保存在另一个文件夹下,这时我们就需要用到分离文件目录的操、文件名、文件后缀的操作。
2、文件目录、文件名及文件后缀的分离及合并
在python下对文件目录和文件名进行分离和合并,可以借助 os 模块来轻松搞定。
#文件目录、文件名及文件后缀的分离
import os
file_path = "/Users/steven/PycharmProjects/AI/RPN/3425581_0.jpg"
(filepath,tempfilename) = os.path.split(file_path)
(filename,extension) = os.path.splitext(tempfilename)
filepath:文件的目录,即 /Users/steven/PycharmProjects/AI/RPN/
tempfilename:文件的全名,即 3425581_0.jpg
filename:文件的名字,即 3425581_0
extension:文件的扩展名,即 .jpg
#文件目录及文件名的合并
import os
img_savepath = "/Users/steven/PycharmProjects/AI/RPN/ROIS"
savepath = os.path.join(img_savepath, tempfilename)
savepath:处理后文件保存的完整路径
img_ savepath:处理后文件保存的目录文件夹名称
tempfilename:待保存的文件的全名
f-strings
要使用f-strings,只需在字符串前加上f
,语法格式如下:
f ' <text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ... '
基本用法
>>> name = "Tom"
>>> age = 3
>>> f"His name is {name}, he's {age} years old."
>>> "His name is Tom, he's 3 years old."
支持表达式
# 数学运算
>>> f'He will be { age+1 } years old next year.'
>>> 'He will be 4 years old next year.' # 对象操作
>>> spurs = {"Guard": "Parker", "Forward": "Duncan"}
>>> f"The {len(spurs)} players are: {spurs['Guard']} the guard, and {spurs['Forward']} the forward."
>>> 'The 2 players are: Parker the guard, and Duncan the forward.' >>> f'Numbers from 1-10 are {[_ for _ in range(1, 11)]}'
>>> 'Numbers from 1-10 are [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]'
原始字符串操作符( r/R )
是为了对付那些在字符串中出现的特殊字符(下面的小节会介绍这些特殊字符)。在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
除了原始字符串符号(引号前面的字母"r")以外,原始字符串跟普通字符串有着几乎完全相同的语法. 这个'r'可以是小写也可以是大写,唯一的要求是必须紧靠在第一个引号前.
python 常见细节知识点的更多相关文章
- python类,魔术方法等学习&&部分ssti常见操作知识点复习加深
python类学习&&部分ssti常见操作知识点复习加深 在做ssti的模块注入的时候经常觉得自己python基础的薄弱,来学习一下,其实还是要多练习多背. 在python中所有类默认 ...
- Django学习笔记(19)——BBS+Blog项目开发(3)细节知识点补充
本文将BBS+Blog项目开发中所需要的细节知识点进行补充,其中内容包括KindEditor编辑器的使用,BeautifulSoup 模块及其防XSS攻击,Django中admin管理工具的使用,me ...
- 你所不了解的javascript操作DOM的细节知识点(一)
你所不了解的javascript操作DOM的细节知识点(一) 一:Node类型 DOM1级定义了一个Node接口,该接口是由DOM中的所有节点类型实现.每个节点都有一个nodeType属性,用于表明节 ...
- 11_Servlet的一些细节知识点
[Servlet的细节知识点1-----一个Servlet映射到多个URL] 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servl ...
- C语言的一些常见细节
C语言的一些常见细节 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个 ...
- Python常见的错误汇总
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- python遇到的知识点
python遇到的知识点,记录一下.方便学习. 文件相关操作 查了资料,关于open()的mode参数: 'r':读 'w':写 'a':追加 'r+' == r+w(可读可写,文件若不存在就报错(I ...
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
随机推荐
- rocketmq源码分析3-consumer消息获取
使用rocketmq的大体消息发送过程如下: 在前面已经分析过MQ的broker接收生产者客户端发过来的消息的过程,此文主要讲述订阅者获取消息的过程,或者说broker是怎样将消息传递给消费者客户端的 ...
- [java开发篇][dom4j模块]遍历,解析xml
package com.softwinner.performance.benchmark; /** * Created by Administrator on 2017/7/21. */ import ...
- uiautomator 一个简单脚本创建流程
http://www.codeceo.com/article/android-ui-auto-test.html
- 文件拷贝后无法编辑,用chown修改所有者和分组
文件拷贝后无法编辑,chmod查看权限,发现当前用户不在文件里的所有者或所有组你,需用chwon修改拥有者和分组. 实例1:改变拥有者和群组 chown mail:mail log2012.log - ...
- 九度oj 题目1411:转圈
题目描述: 在一个有向图有n个顶点(编号从1到n),给一个起点s,问从起点出发,至少经过一条边,回到起点的最短距离. 输入: 输入包括多组,每组输入第一行包括三个整数n,m,s(1<=n< ...
- [ZJOI2007]最大半连通子图 (Tarjan缩点,拓扑排序,DP)
题目链接 Solution 大概是个裸题. 可以考虑到,如果原图是一个有向无环图,那么其最大半联通子图就是最长的一条路. 于是直接 \(Tarjan\) 缩完点之后跑拓扑序 DP就好了. 同时由于是拓 ...
- 关于在IE下面promise兼容的解决办法
下载es6-promise就可以解决这个问题 import ES6Promise from "es6-promise" if(!window.Promise) { console. ...
- windows.open 以post的方式传递参数
今天看到有篇文章寫到 windows.open 可以post方式傳遞參數,就趕緊照作看看,結果是可行的,感謝撰寫這篇文章的作者~ /** * window.open with post method ...
- python算法与数据结构-顺序表(37)
1.顺序表介绍 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素.顺序表可以分配一段连续的存储空间 ...
- 【POJ3321】Apple Tree(DFS序,树状数组)
题意:给一棵n个节点的树,每个节点开始有一个苹果,m次操作 1.将某个结点的苹果数异或 1 2.查询一棵子树内的苹果数 n,m<=100000 思路:最近一段时间在思考树上统计问题的算法 发 ...