bisect

第24天:Python 标准库概览2

夙愿已清 提交于 2020-10-27 16:40:57
by 潮汐 Python 的标准库非常广泛,提供了各种各样的工具。该库包含内置模块(用C编写),可以访问系统功能,例如 Python 程序员无法访问的文件 I / O,以及用 Python 编写的模块,这些模块为许多问题提供标准化解决方案。其中一些模块明确地旨在通过将平台特定的内容抽象为平台中立的 API 来鼓励和增强 Python 程序的可移植性。 Python 的标准库(standard library) 是 Python 的一个组成部分,也是 Python 的利器,它可以让编程事半功倍。 Python 标准库第二部分涵盖的模块是包含在 Python 高级编程中,这一部分所涉及的模块很少运用在脚本中 13、格式化输出 13.1 reprlib 模块 reprlib 模块提供了一个定制化版本的 repr() 函数,用于缩略显示大型或深层嵌套的容器对象,将容器中的对象按照一定的规律输出 reprlib 模块包含了一个类、一实例对象、一方法 class reprlib.Repr Repr类, 该类提供格式化服务,对于实现与内置的 repr() 类似的函数很有用;添加了不同对象类型的大小限制,以避免生成过长的表示。 reprlib.aRepr Repr 类的实例,用于提供下面描述的 Repr() 函数。更改此对象的属性将影响 repr() 和 Python 调试器使用的大小限制。

Python新手学习标准库模块命名

a 夏天 提交于 2020-08-06 01:20:29
与 Python 标准库模块命名冲突 Python的一个优秀的地方在于它提供了丰富的库模块。但是这样的结果是,如果你不下意识的避免,很容易你会遇到你自己的模块的名字与某个随Python附带的标准库的名字冲突的情况(比如,你的代码中可能有一个叫做email.py的模块,它就会与标准库中同名的模块冲突)。 这会导致一些很粗糙的问题,例如当你想加载某个库,这个库需要加载Python标准库里的某个模块,结果呢,因为你有一个与标准库里的模块同名的模块,这个包错误的将你的模块加载了进去,而不是加载Python标准库里的那个模块。这样一来就会有麻烦了。 所以在给模块起名字的时候要小心了,得避免与Python标准库中的模块重名。相比起你提交一个“Python改进建议(Python Enhancement Proposal (PEP))”去向上要求改一个标准库里包的名字,并得到批准来说,你把自己的那个模块重新改个名字要简单得多。 知识点扩充: python标准库简介 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU按行读取接口 rlcompleter:GNU按行读取的实现函数 二进制数据 struct

What is the complexity of bisect algorithm?

余生长醉 提交于 2020-05-12 20:31:46
问题 I wrote code to understand which of them is faster when it comes to search an element in a list. It turns out to be bisect. What I do not understand is what is complexity of bisect algorithm and does it use Van Emde Boas tree? #python inbuilt list search using 'in' took 0.0702499200317 secs def mul3(): a = [1, 2, 4, 5, 6, 7, 8, 10, 12, 42, 55, 65, 69, 95, 96, 101, 156, 199] for x in a: if x in a: print x, "True" else: print x, "False" #using bisect took 0.0649611193601 def mul4(): a = [1, 2,

git-bash的alias别名设置

安稳与你 提交于 2020-04-29 12:46:33
正常需要设置别名时,直接使用 alias gs="git status" 输入上边的命令之后,就可以使用gs(命令)代替git status(命令),这是一种设置别名简化输入,提升效率的办法 可以根据自己日常的习惯,和自己的理解,按照自己是喜好特点定义自己的一组常用的别名缩写。 然后日常操作就会变得简单很多。 但是,如果只是如此操作,当我们关闭终端窗口的时候,重新启动之后会发现,这个别名消失了。原因是没有永久保存。 如果想永久保存,我们可以做如下操作: ls ~/.bash_profile 查看用户目录的.bash_profile文件是否存在,如果存在直接修改,不存在这创建该文件,并编辑其内容 vi ~/.bash_profile 在该文件中写入最开始的alias 别名="命令"的信息,每行写一个。可以把所有想要设置别名的命令都列到这里。 然后保存该文件退出。此时,所有相关的别名设置基本完成。但是目前并么有马上生效,要不重启终端,要不通过命令 source ~/.bash_profile 命令执行以后,所有的别名就可以正常使用了,而且如果关掉终端再打开依然可以正常使用。 因为缩写确实是非常的方便,所以很多人都有这样的习惯。这里推荐一些人使用的zshell的一套别名 alias gpm='git push origin master' alias ...=../.. alias ..

不使用 if-elif 语句,如何优雅地判断某个数字所属的等级?

眉间皱痕 提交于 2020-04-19 17:34:27
偶然看到了 stackoverflow 上的一个问题,还挺有启发,故分享一下。 题目大意是:有从 A 到 F 的 5 个等级,现要判断某个数值(从 0 到 1 之间)所属的等级。举例,如数值 >= 0.9,则属于 A;若数值 >= 0.8,则属于 B;以此类推。 若使用 if-elif 语句,可能会写成这样: if scr >= 0.9: print('A') elif scr >= 0.8: print('B') elif scr >= 0.7: print('C') elif scr >= 0.6: print('D') else: print('F') 此写法出现了很多重复的模式,不够简洁优雅。有什么更好的写法,来实现这个目的呢? 该问题下的回答挺多的,实现思路五花八门。我挑几个可读性比较好: 方法一:使用 bisect 模块(数字可调) 方法二:使用 zip() 与 next() 方法三:使用字典(仅适用于 Python 3.6 以上的有序字典) 还有其它几个回答,虽然都能实现数字分级的目的,但是其可读性要差很多,因为它们要么需要你作计算和推理,要么就是引入了额外的变量。 感兴趣的话,你可在这个地址查看全部答案: https://stackoverflow.com/questions/61030617/how-can-i-simplify-repetitive-if

Python自学笔记-第五章模块(下)

我与影子孤独终老i 提交于 2020-03-08 18:17:09
3.标准库概览 Python标准库通常被描述为“自带的电池”,自然地提供了广泛的功能,涵盖了200多个包和模块。这里总和多种资料进行简要的介绍。 3.1.字符串处理 3.1.1.string String模块提供一些有用的常量,比如 string.ascii_letter 与 string.hexdigits 。该模块还提供 string.Formatter 类,可以实现该类的子类,以便提供自定义的字符串格式化器。 3.1.2.textwrap 用于捕获指定宽度的文本行,并最小化缩排的需求。 3.1.3.struct 提供了一些函数,可用于将数字,布尔型变量以及字符串打包为字节对象(以其二进制表示形式),或从字节对象中拆分为适当的类型。在需要对数据进行处理,使其返送到以C编写的底层库时,有用。 3.1.4.difflib 提供了用于对序列(比如字符串)进行比较的类与方法,并可以产生以标准的'diff'格式与HTML格式表示的输出信息。 3.1.5.re 正则表达式模块,后续会单独讲解 3.2.命令行程序设计 3.2.1.fileinput fileinput.input() 函数会对控制台中重定向的所有行(如果存在)进行迭代,或对命令行中列出的文件中的所有行进行的第。通过使用 fileinput.filename() 和 fileinput.lineno()

Python 二分查找与 bisect 模块

百般思念 提交于 2020-03-01 04:52:33
Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n)。对于大数据量,则可以用二分查找进行优化。二分查找要求对象必须有序,其基本原理如下: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束; 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 3.如果在某一步骤数组为空,则代表找不到。 二分查找也成为折半查找,算法每一次比较都使搜索范围缩小一半, 其时间复杂度为 O(logn)。 我们分别用递归和循环来实现二分查找: def binary_search_recursion(lst, value, low, high): if high < low: return None mid = (low + high) / 2 if lst[mid] > value: return binary_search_recursion(lst, value, low, mid-1) elif lst[mid] < value: return binary_search_recursion(lst, value, mid+1, high) else: return mid def binary_search

如何找到在任何分支中引入字符串的Git提交?

﹥>﹥吖頭↗ 提交于 2020-02-27 02:02:35
我希望能够找到任何分支中任何提交中引入的某个字符串,我该怎么做? 我发现了一些东西(我为Win32修改过),但 git whatchanged 似乎没有调查不同的分支(忽略py3k块,它只是一个msys / win行补丁修复) git whatchanged -- <file> | \ grep "^commit " | \ python -c "exec(\"import sys,msvcrt,os\nmsvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)\nfor l in sys.stdin: print(l.split()[1])\")" | \ xargs -i% git show origin % -- <file> 如果您的解决方案很慢,这并不重要。 #1楼 Mark Longair的答案 非常好,但我发现这个更简单的版本适合我。 git log -S whatever #2楼 用相同的答案搞清楚: $ git config --global alias.find '!git log --color -p -S ' ! 因为其他方式,git不能正确地将参数传递给-S。 看到 这个回复 --color 和 -p 有助于准确显示“whatchanged” 现在你可以做到 $ git find <whatever> 要么 $ git

Bisection search [duplicate]

*爱你&永不变心* 提交于 2020-01-17 13:51:09
问题 This question already has answers here : Closed 7 years ago . Possible Duplicate: Using bisection search to determine I have posted other thread but it did not receive answers thus i'm trying to provide some of my work to make more clear. I need to use bisection method to determine monthly payment in order to pay off debt in one year exactly. Here's some code: originalBalance = 320000 annualInterestRate = 0.2 monthly_interest = annualInterestRate / 12 low = originalBalance/12 high =