ACM or CSP——Python常用算法

    • 输入
      • 多组输入,读取到文件末尾EOF结束
      • 输入不确定行数的数据
    • 正则表达式
      • 正则表达式的() [] {}有不同的意思。
      • 字符串匹配和搜索
      • 字符串搜索和替换
      • 字符串忽略大小写的搜索替换
      • 多行匹配模式
    • math
    • string
      • 符号 功能
      • string.format()使用
    • 日期和时间
      • 基本的日期与时间转换
      • 计算最后一个周五的日期
      • 计算当前月份的日期范围
    • 随机
      • 随机选择
    • 优先队列 & 排序
      • 字典有序
      • 优先队列
        • heapq
        • 查找最大或最小的 N 个元素
      • 排序
        • sorted
    • 查找
      • 二分查找
      • 查询树
    • 图论
      • 最短路(dijstra、bellmanford) + 前向星
      • 并查集
      • 网络流
        • edmonds-karp
    • 测试
      • 看时间
      • 随机数据生成
    • 参考资料

输入

input() 不读换行符
list(map(int,input().strip().split())) #strip()去前后空格

多组输入,读取到文件末尾EOF结束

while True:
try:
a = input()
except EOFError:
break
z = eval(line) #将line转化为表达式类型并运算

输入不确定行数的数据

x = 0
while True:
try:
x += int(input())
except:
break

正则表达式

1.要转义的:.,^,$,*,+,?,\,[],|,{},()

  1. \s 来匹配TAB和空格的混合字符

  2. 匹配换行符,TAB,空格的混合字符

4.要match 就要像下面,注意要用groups()

>>> import re
>>> match = re.match(r"Hello(\s*)(.*)World!", "Hello              Python World!")
>>> match.groups()
('\t\t  ', 'Python ')

符号含义

模式 描述
^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。
re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n} 精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的"o",但是能匹配 "food" 中的两个 o。
re{ n,} 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",
但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}"
则等价于 "o*"。
re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式a| b 匹配a或b
(re) 匹配括号内的表达式,也表示一个组
(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re) 类似 (...), 但是不表示一个组
(?imx: re) 在括号中使用i, m, 或 x 可选标志
(?-imx: re) 在括号中不使用i, m, 或 x 可选标志
(?#...) 注释.
(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试
匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) 匹配的独立模式,省去回溯。
\w 匹配字母数字及下划线
\W 匹配非字母数字及下划线
\s 匹配任意空白字符,等价于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z 匹配字符串结束
\G 匹配最后匹配完成的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,
'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配
"never" 中的 'er'。
\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
\1...\9 匹配第n个分组的内容。
\10 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

常用正则表达式

用户名	/^[a-z0-9_-]{3,16}$/
密码	/^[a-z0-9_-]{6,18}$/
十六进制值	/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
电子邮箱	/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/
URL	/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
IP 地址	/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
HTML 标签	/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
删除代码\\注释	(?<!http:|\S)//.*$
Unicode编码中的汉字范围	/^[\u2E80-\u9FFF]+$/

正则表达式的() [] {}有不同的意思。

() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。

(\s*)表示连续空格的字符串。

[]是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s*]表示空格或者*号。

{}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s{1,3}表示匹配一到三个空格。

(0-9) 匹配 '0-9′ 本身。 [0-9]* 匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。

[0-9]{0,9} 表示长度为 0 到 9 的数字字符串。

圆括号()是组,主要应用在限制多选结构的范围/分组/捕获文本/环视/特殊模式处理

示例:

1、(abc|bcd|cde),表示这一段是abc、bcd、cde三者之一均可,顺序也必须一致

2、(abc)?,表示这一组要么一起出现,要么不出现,出现则按此组内的顺序出现

3、(?:abc)表示找到这样abc这样一组,但不记录,不保存到变量中,否则可以通过x取第几个括号所匹配到的项,比如:(aaa)(bbb)(ccc)(?:ddd)(eee),可以用$1获取(aaa)匹配到的内容,而$3则获取到了(ccc)匹配到的内容,而$4则获取的是由(eee)匹配到的内容,因为前一对括号没有保存变量

4、a(?=bbb) 顺序环视 表示a后面必须紧跟3个连续的b

5、(?i:xxxx) 不区分大小写 (?s:.*) 跨行匹配.可以匹配回车符

方括号是单个匹配,字符集/排除字符集/命名字符集

示例:
1、[0-3],表示找到这一个位置上的字符只能是0到3这四个数字,与(abc|bcd|cde)的作用比较类似,但圆括号可以匹配多个连续的字符,而一对方括号只能匹配单个字符

2、[^0-3],表示找到这一个位置上的字符只能是除了0到3之外的所有字符

3、[:digit:] 0-9 [:alnum:] A-Za-z0-9

()和[]有本质的区别

()内的内容表示的是一个子表达式,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理,例如(ab){1,3},就表示ab一起连续出现最少1次,最多3次。如果没有括号的话,ab{1,3},就表示a,后面紧跟的b出现最少1次,最多3次。另外,括号在匹配模式中也很重要。这个就不延伸了,LZ有兴趣可以自己查查

[]表示匹配的字符在[]中,并且只能出现一次,并且特殊字符写在[]会被当成普通字符来匹配。例如[(a)],会匹配(、a、)、这三个字符。

字符串匹配和搜索

问题
你想匹配或者搜索特定模式的文本

解决方案
如果你想匹配的是字面字符串,那么你通常只需要调用基本字符串方法就行, 比如 str.find() , str.endswith() , str.startswith() 或者类似的方法:

>>> text = 'yeah, but no, but yeah, but no, but yeah'
>>> # Exact match
>>> text == 'yeah'
False
>>> # Match at start or end
>>> text.startswith('yeah')
True
>>> text.endswith('no')
False
>>> # Search for the location of the first occurrence
>>> text.find('no')
10
>>>

对于复杂的匹配需要使用正则表达式和 re 模块。 为了解释正则表达式的基本原理,假设你想匹配数字格式的日期字符串比如 11/27/2012 ,你可以这样做:

>>> text1 = '11/27/2012'
>>> text2 = 'Nov 27, 2012'
>>>
>>> import re
>>> # Simple matching: \d+ means match one or more digits
>>> if re.match(r'\d+/\d+/\d+', text1):
... print('yes')
... else:
... print('no')
...
yes
>>> if re.match(r'\d+/\d+/\d+', text2):
... print('yes')
... else:
... print('no')
...
no
>>>

如果你想使用同一个模式去做多次匹配,你应该先将模式字符串预编译为模式对象。比如:

>>> datepat = re.compile(r'\d+/\d+/\d+')
>>> if datepat.match(text1):
... print('yes')
... else:
... print('no')
...
yes
>>> if datepat.match(text2):
... print('yes')
... else:
... print('no')
...
no

match() 总是从字符串开始去匹配,如果你想查找字符串任意部分的模式出现位置, 使用 findall() 方法去代替。比如:

>>> text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
>>> datepat.findall(text)
['11/27/2012', '3/13/2013']
>>>

在定义正则式的时候,通常会利用括号去捕获分组。比如:

>>> datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
>>>

捕获分组可以使得后面的处理更加简单,因为可以分别将每个组的内容提取出来。比如:

>>> m = datepat.match('11/27/2012')
>>> m
<_sre.SRE_Match object at 0x1005d2750>
>>> # Extract the contents of each group
>>> m.group(0)
'11/27/2012'
>>> m.group(1)
'11'
>>> m.group(2)
'27'
>>> m.group(3)
'2012'
>>> m.groups()
('11', '27', '2012')
>>> month, day, year = m.groups()
>>>
>>> # Find all matches (notice splitting into tuples)
>>> text
'Today is 11/27/2012. PyCon starts 3/13/2013.'
>>> datepat.findall(text)
[('11', '27', '2012'), ('3', '13', '2013')]
>>> for month, day, year in datepat.findall(text):
... print('{}-{}-{}'.format(year, month, day))
...
2012-11-27
2013-3-13
>>>

findall() 方法会搜索文本并以列表形式返回所有的匹配。 如果你想以迭代方式返回匹配,可以使用 finditer() 方法来代替,比如:

>>> for m in datepat.finditer(text):
... print(m.groups())
...
('11', '27', '2012')
('3', '13', '2013')
>>>

讨论
关于正则表达式理论的教程已经超出了本书的范围。 不过,这一节阐述了使用re模块进行匹配和搜索文本的最基本方法。 核心步骤就是先使用 re.compile() 编译正则表达式字符串, 然后使用 match() , findall() 或者 finditer() 等方法。

当写正则式字符串的时候,相对普遍的做法是使用原始字符串比如 r’(\d+)/(\d+)/(\d+)’ 。 这种字符串将不去解析反斜杠,这在正则表达式中是很有用的。 如果不这样做的话,你必须使用两个反斜杠,类似 ‘(\d+)/(\d+)/(\d+)’ 。

需要注意的是 match() 方法仅仅检查字符串的开始部分。它的匹配结果有可能并不是你期望的那样。比如:

>>> m = datepat.match('11/27/2012abcdef')
>>> m
<_sre.SRE_Match object at 0x1005d27e8>
>>> m.group()
'11/27/2012'
>>>

如果你想精确匹配,确保你的正则表达式以$结尾,就像这么这样:

>>> datepat = re.compile(r'(\d+)/(\d+)/(\d+)$')
>>> datepat.match('11/27/2012abcdef')
>>> datepat.match('11/27/2012')
<_sre.SRE_Match object at 0x1005d2750>
>>>

最后,如果你仅仅是做一次简单的文本匹配/搜索操作的话,可以略过编译部分,直接使用 re 模块级别的函数。比如:

>>> re.findall(r'(\d+)/(\d+)/(\d+)', text)
[('11', '27', '2012'), ('3', '13', '2013')]
>>>

字符串搜索和替换

问题
你想在字符串中搜索和匹配指定的文本模式

解决方案
对于简单的字面模式,直接使用 str.replace() 方法即可,比如:

>>> text = 'yeah, but no, but yeah, but no, but yeah'
>>> text.replace('yeah', 'yep')
'yep, but no, but yep, but no, but yep'
>>>

对于复杂的模式,请使用 re 模块中的 sub() 函数。 为了说明这个,假设你想将形式为 11/27/2012 的日期字符串改成 2012-11-27 。示例如下:

>>> text = 'Today is 11/27/2012. PyCon starts 3/13/2013.'
>>> import re
>>> re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
'Today is 2012-11-27. PyCon starts 2013-3-13.'
>>>

sub() 函数中的第一个参数是被匹配的模式,第二个参数是替换模式。反斜杠数字比如 \3 指向前面模式的捕获组号。

如果你打算用相同的模式做多次替换,考虑先编译它来提升性能。比如:

>>> import re
>>> datepat = re.compile(r'(\d+)/(\d+)/(\d+)')
>>> datepat.sub(r'\3-\1-\2', text)
'Today is 2012-11-27. PyCon starts 2013-3-13.'
>>>
对于更加复杂的替换,可以传递一个替换回调函数来代替,比如:>>> from calendar import month_abbr
>>> def change_date(m):
... mon_name = month_abbr[int(m.group(1))]
... return '{} {} {}'.format(m.group(2), mon_name, m.group(3))
...
>>> datepat.sub(change_date, text)
'Today is 27 Nov 2012. PyCon starts 13 Mar 2013.'
>>>

一个替换回调函数的参数是一个 match 对象,也就是 match() 或者 find() 返回的对象。 使用 group() 方法来提取特定的匹配部分。回调函数最后返回替换字符串。

如果除了替换后的结果外,你还想知道有多少替换发生了,可以使用 re.subn() 来代替。比如:

>>> newtext, n = datepat.subn(r'\3-\1-\2', text)
>>> newtext
'Today is 2012-11-27. PyCon starts 2013-3-13.'
>>> n
2
>>>

字符串忽略大小写的搜索替换

问题
你需要以忽略大小写的方式搜索与替换文本字符串
解决方案
为了在文本操作时忽略大小写,你需要在使用 re 模块的时候给这些操作提供 re.IGNORECASE 标志参数。比如:

>>> text = 'UPPER PYTHON, lower python, Mixed Python'
>>> re.findall('python', text, flags=re.IGNORECASE)
['PYTHON', 'python', 'Python']
>>> re.sub('python', 'snake', text, flags=re.IGNORECASE)
'UPPER snake, lower snake, Mixed snake'
>>>

最后的那个例子揭示了一个小缺陷,替换字符串并不会自动跟被匹配字符串的大小写保持一致。 为了修复这个,你可能需要一个辅助函数,就像下面的这样:

def matchcase(word):def replace(m):text = m.group()if text.isupper():return word.upper()elif text.islower():return word.lower()elif text[0].isupper():return word.capitalize()else:return wordreturn replace

下面是使用上述函数的方法:

>>> re.sub('python', matchcase('snake'), text, flags=re.IGNORECASE)
'UPPER SNAKE, lower snake, Mixed Snake'
>>>

译者注: matchcase(‘snake’) 返回了一个回调函数(参数必须是 match 对象),前面一节提到过, sub() 函数除了接受替换字符串外,还能接受一个回调函数

多行匹配模式

问题
你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。

解决方案
这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。 比如,假设你想试着去匹配C语言分割的注释:

>>> comment = re.compile(r'/\*(.*?)\*/')
>>> text1 = '/* this is a comment */'
>>> text2 = '''/* this is a
... multiline comment */
... '''
>>>
>>> comment.findall(text1)
[' this is a comment ']
>>> comment.findall(text2)
[]
>>>
为了修正这个问题,你可以修改模式字符串,增加对换行的支持。比如:
>>> comment = re.compile(r'/\*((?:.|\n)*?)\*/')
>>> comment.findall(text2)
[' this is a\n multiline comment ']
>>>

在这个模式中, (?:.|\n) 指定了一个非捕获组 (也就是它定义了一个仅仅用来做匹配,而不能通过单独捕获或者编号的组)。

讨论
re.compile() 函数接受一个标志参数叫 re.DOTALL ,在这里非常有用。 它可以让正则表达式中的点(.)匹配包括换行符在内的任意字符。比如:

>>> comment = re.compile(r'/\*(.*?)\*/', re.DOTALL)
>>> comment.findall(text2)
[' this is a\n multiline comment ']

对于简单的情况使用 re.DOTALL 标记参数工作的很好, 但是如果模式非常复杂或者是为了构造字符串令牌而将多个模式合并起来(2.18节有详细描述), 这时候使用这个标记参数就可能出现一些问题。 如果让你选择的话,最好还是定义自己的正则表达式模式,这样它可以在不需要额外的标记参数下也能工作的很好。

math

函数

acos(x)	返回x的反余弦弧度值。
asin(x)	返回x的反正弦弧度值。
atan(x)	返回x的反正切弧度值。
atan2(y, x)	返回给定的 X 及 Y 坐标值的反正切值。
cos(x)	返回x的弧度的余弦值。
hypot(x, y)	返回欧几里德范数 sqrt(x*x + y*y)。
sin(x)	返回的x弧度的正弦值。
tan(x)	返回x弧度的正切值。
degrees(x)	将弧度转换为角度,如degrees(math.pi/2) , 返回90.0
radians(x)	将角度转换为弧度
abs(x)	返回数字的绝对值,如abs(-10) 返回 10
ceil(x)	返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y)	如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x)	返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x)	返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x)	返回数字的下舍整数,如math.floor(4.9)返回 4
log(x)	如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x)	返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,...)	返回给定参数的最大值,参数可以为序列。
min(x1, x2,...)	返回给定参数的最小值,参数可以为序列。
modf(x)	返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y)	x**y 运算后的值。
round(x [,n])	返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x)	返回数字x的平方根

string

操作符 描述 实例

\+	字符串连接	>>>a + b 'HelloPython'
*	重复输出字符串	>>>a * 2 'HelloHello'
[]	通过索引获取字符串中字符	>>>a[1] 'e'
[ : ]	截取字符串中的一部分	>>>a[1:4] 'ell'
in	成员运算符 - 如果字符串中包含给定的字符返回 True	>>>"H" in a True
not in	成员运算符 - 如果字符串中不包含给定的字符返回 True	>>>"M" not in a True`
r/R	原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。	>>>print r'\n' \n   >>> print R'\n' \n

python字符串格式化符号:

符   号	描述%c	 格式化字符及其ASCII码%s	 格式化字符串%d	 格式化整数%u	 格式化无符号整型%o	 格式化无符号八进制数%x	 格式化无符号十六进制数%X	 格式化无符号十六进制数(大写)%f	 格式化浮点数字,可指定小数点后的精度%e	 用科学计数法格式化浮点数%E	 作用同%e,用科学计数法格式化浮点数%g	 %f和%e的简写%G	 %f 和 %E 的简写%p	 用十六进制数格式化变量的地址

符号 功能

*	定义宽度或者小数点精度
-	用做左对齐
+	在正数前面显示加号( + )
<sp>	在正数前面显示空格
**在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')**
0	显示的数字前面填充'0'而不是默认的空格
%	'%%'输出一个单一的'%'
(var)	映射变量(字典参数)
m.n.	m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)%f指定输出小数点位 print('%4.3f' % 21312.12312) 最小总宽度为4,小数点后3位,总宽度不够前面补空格。

python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。

方法 描述
string.capitalize() 把字符串的第一个字符大写
string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding=‘UTF-8’, errors=‘strict’) 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding=‘UTF-8’, errors=‘strict’) 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
string.endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.format() 格式化字符串
string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
string.isdecimal() 如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.isnumeric() 如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.lower() 转换 string 中所有大写字符为小写.
string.maketrans(intab, outtab]) maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
string.partition(str) 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,end=len(string) ) 类似于 find()函数,不过是从右边开始查找.
string.rindex( str, beg=0,end=len(string)) 类似于 index(),不过是从右边开始.
string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rpartition(str) 类似于 partition()函数,不过是从右边开始查找
string.rstrip() 删除 string 字符串末尾的空格.
string.split(str="", num=string.count(str)) 以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
string.splitlines([keepends]) 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()
string.swapcase() 翻转 string 中的大小写
string.title() 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.upper() 转换 string 中的小写字母为大写
string.zfill(width) 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

string.format()使用


# -*- coding: UTF-8 -*-print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的
  • python函数

hex() 转十六进制

oct() 转八进制

日期和时间

基本的日期与时间转换

问题
你需要执行简单的时间转换,比如天到秒,小时到分钟等的转换。

解决方案
为了执行不同时间单位的转换和计算,请使用 datetime 模块。 比如,为了表示一个时间段,可以创建一个 timedelta 实例,就像下面这样:

>>> from datetime import timedelta
>>> a = timedelta(days=2, hours=6)
>>> b = timedelta(hours=4.5)
>>> c = a + b
>>> c.days
2
>>> c.seconds
37800
>>> c.seconds / 3600
10.5
>>> c.total_seconds() / 3600
58.5
>>>

如果你想表示指定的日期和时间,先创建一个 datetime 实例然后使用标准的数学运算来操作它们。比如:

>>> from datetime import datetime
>>> a = datetime(2012, 9, 23)
>>> print(a + timedelta(days=10))
2012-10-03 00:00:00
>>>
>>> b = datetime(2012, 12, 21)
>>> d = b - a
>>> d.days
89
>>> now = datetime.today()
>>> print(now)
2012-12-21 14:54:43.094063
>>> print(now + timedelta(minutes=10))
2012-12-21 15:04:43.094063
>>>

在计算的时候,需要注意的是 datetime 会自动处理闰年。比如:

>>> a = datetime(2012, 3, 1)
>>> b = datetime(2012, 2, 28)
>>> a - b
datetime.timedelta(2)
>>> (a - b).days
2
>>> c = datetime(2013, 3, 1)
>>> d = datetime(2013, 2, 28)
>>> (c - d).days
1
>>>

讨论
对大多数基本的日期和时间处理问题, datetime 模块已经足够了。 如果你需要执行更加复杂的日期操作,比如处理时区,模糊时间范围,节假日计算等等, 可以考虑使用 dateutil模块

许多类似的时间计算可以使用 dateutil.relativedelta() 函数代替。 但是,有一点需要注意的就是,它会在处理月份(还有它们的天数差距)的时候填充间隙。看例子最清楚:

>>> a = datetime(2012, 9, 23)
>>> a + timedelta(months=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'months' is an invalid keyword argument for this function
>>>
>>> from dateutil.relativedelta import relativedelta
>>> a + relativedelta(months=+1)
datetime.datetime(2012, 10, 23, 0, 0)
>>> a + relativedelta(months=+4)
datetime.datetime(2013, 1, 23, 0, 0)
>>>
>>> # Time between two dates
>>> b = datetime(2012, 12, 21)
>>> d = b - a
>>> d
datetime.timedelta(89)
>>> d = relativedelta(b, a)
>>> d
relativedelta(months=+2, days=+28)
>>> d.months
2
>>> d.days
28
>>>

计算最后一个周五的日期

问题

你需要查找星期中某一天最后出现的日期,比如星期五。

解决方案

Python的 datetime 模块中有工具函数和类可以帮助你执行这样的计算。 下面是对类似这样的问题的一个通用解决方案:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Topic: 最后的周五
Desc :
"""
from datetime import datetime, timedeltaweekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday','Friday', 'Saturday', 'Sunday']def get_previous_byday(dayname, start_date=None):if start_date is None:start_date = datetime.today()day_num = start_date.weekday()day_num_target = weekdays.index(dayname)days_ago = (7 + day_num - day_num_target) % 7if days_ago == 0:days_ago = 7target_date = start_date - timedelta(days=days_ago)return target_date

在交互式解释器中使用如下:

>>> datetime.today() # For reference
datetime.datetime(2012, 8, 28, 22, 4, 30, 263076)
>>> get_previous_byday('Monday')
datetime.datetime(2012, 8, 27, 22, 3, 57, 29045)
>>> get_previous_byday('Tuesday') # Previous week, not today
datetime.datetime(2012, 8, 21, 22, 4, 12, 629771)
>>> get_previous_byday('Friday')
datetime.datetime(2012, 8, 24, 22, 5, 9, 911393)
>>>
可选的 start_date 参数可以由另外一个 datetime 实例来提供。比如:>>> get_previous_byday('Sunday', datetime(2012, 12, 21))
datetime.datetime(2012, 12, 16, 0, 0)
>>>

讨论
上面的算法原理是这样的:先将开始日期和目标日期映射到星期数组的位置上(星期一索引为0), 然后通过模运算计算出目标日期要经过多少天才能到达开始日期。然后用开始日期减去那个时间差即得到结果日期。

如果你要像这样执行大量的日期计算的话,你最好安装第三方包 python-dateutil 来代替。 比如,下面是是使用 dateutil 模块中的 relativedelta() 函数执行同样的计算:

>>> from datetime import datetime
>>> from dateutil.relativedelta import relativedelta
>>> from dateutil.rrule import *
>>> d = datetime.now()
>>> print(d)
2012-12-23 16:31:52.718111>>> # Next Friday
>>> print(d + relativedelta(weekday=FR))
2012-12-28 16:31:52.718111
>>>>>> # Last Friday
>>> print(d + relativedelta(weekday=FR(-1)))
2012-12-21 16:31:52.718111
>>>

计算当前月份的日期范围

问题
你的代码需要在当前月份中循环每一天,想找到一个计算这个日期范围的高效方法。

解决方案

在这样的日期上循环并需要事先构造一个包含所有日期的列表。 你可以先计算出开始日期和结束日期, 然后在你步进的时候使用 datetime.timedelta 对象递增这个日期变量即可。

下面是一个接受任意 datetime 对象并返回一个由当前月份开始日和下个月开始日组成的元组对象。

from datetime import datetime, date, timedelta
import calendardef get_month_range(start_date=None):if start_date is None:start_date = date.today().replace(day=1)_, days_in_month = calendar.monthrange(start_date.year, start_date.month)end_date = start_date + timedelta(days=days_in_month)return (start_date, end_date)

有了这个就可以很容易的在返回的日期范围上面做循环操作了:

>>> a_day = timedelta(days=1)
>>> first_day, last_day = get_month_range()
>>> while first_day < last_day:
...     print(first_day)
...     first_day += a_day
...
2012-08-01
2012-08-02
2012-08-03
2012-08-04
2012-08-05
2012-08-06
2012-08-07
2012-08-08
2012-08-09

讨论
上面的代码先计算出一个对应月份第一天的日期。 一个快速的方法就是使用 date 或 datetime 对象的 replace() 方法简单的将 days 属性设置成1即可。 replace() 方法一个好处就是它会创建和你开始传入对象类型相同的对象。 所以,如果输入参数是一个 date 实例,那么结果也是一个 date 实例。 同样的,如果输入是一个 datetime 实例,那么你得到的就是一个 datetime 实例。

然后,使用 calendar.monthrange() 函数来找出该月的总天数。 任何时候只要你想获得日历信息,那么 calendar 模块就非常有用了。 monthrange() 函数会返回包含星期和该月天数的元组。

一旦该月的天数已知了,那么结束日期就可以通过在开始日期上面加上这个天数获得。 有个需要注意的是结束日期并不包含在这个日期范围内(事实上它是下个月的开始日期)。 这个和Python的 slice 与 range 操作行为保持一致,同样也不包含结尾。

为了在日期范围上循环,要使用到标准的数学和比较操作。 比如,可以利用 timedelta 实例来递增日期,小于号<用来检查一个日期是否在结束日期之前。

理想情况下,如果能为日期迭代创建一个同内置的 range() 函数一样的函数就好了。 幸运的是,可以使用一个生成器来很容易的实现这个目标:

def date_range(start, stop, step):while start < stop:yield startstart += step

下面是使用这个生成器的例子:

>>> for d in date_range(datetime(2012, 9, 1), datetime(2012,10,1),timedelta(hours=6)):
...     print(d)
...
2012-09-01 00:00:00
2012-09-01 06:00:00
2012-09-01 12:00:00
2012-09-01 18:00:00
2012-09-02 00:00:00
2012-09-02 06:00:00
...
>>>

这种实现之所以这么简单,还得归功于Python中的日期和时间能够使用标准的数学和比较操作符来进行运算。

随机

随机选择

问题
你想从一个序列中随机抽取若干元素,或者想生成几个随机数。

解决方案
random 模块有大量的函数用来产生随机数和随机选择元素。 比如,要想从一个序列中随机的抽取一个元素,可以使用 random.choice() :

>>> import random
>>> values = [1, 2, 3, 4, 5, 6]
>>> random.choice(values)
2

为了提取出N个不同元素的样本用来做进一步的操作,可以使用

 random.sample() :>>> random.sample(values, 2)
[6, 2]

如果你仅仅只是想打乱序列中元素的顺序,可以使用 random.shuffle() :

>>> random.shuffle(values)
>>> values
[2, 4, 6, 5, 3, 1]

生成随机整数,请使用 random.randint() :

>>> random.randint(0,10)
2

为了生成0到1范围内均匀分布的浮点数,使用 random.random() :

>>> random.random()
0.9406677561675867

如果要获取N位随机位(二进制)的整数,使用 random.getrandbits() :

>>> random.getrandbits(200)
335837000776573622800628485064121869519521710558559406913275

讨论
random 模块使用 Mersenne Twister 算法来计算生成随机数。这是一个确定性算法, 但是你可以通过 random.seed() 函数修改初始化种子。比如:

random.seed() # Seed based on system time or os.urandom()
random.seed(12345) # Seed based on integer given
random.seed(b'bytedata') # Seed based on byte data
除了上述介绍的功能,random模块还包含基于均匀分布、高斯分布和其他分布的随机数生成函数。 比如, random.uniform() 计算均匀分布随机数, random.gauss() 计算正态分布随机数。 对于其他的分布情况请参考在线文档。

在 random 模块中的函数不应该用在和密码学相关的程序中。 如果你确实需要类似的功能,可以使用ssl模块中相应的函数。 比如, ssl.RAND_bytes() 可以用来生成一个安全的随机字节序列。

优先队列 & 排序

字典有序

1.键有序,dict就是键有序

2.值有序,用collections包里的OrderedDict

优先队列

heapq

import heapq
#向堆中插入元素,heapq会维护列表heap中的元素保持堆的性质
heapq.heappush(heap, item)
#heapq把列表x转换成堆
heapq.heapify(x)
#从可迭代的迭代器中返回最大的n个数,可以指定比较的key
#从可迭代的迭代器中返回最小的n个数,可以指定比较的key
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]
portfolio = [{'name': 'IBM', 'shares': 100, 'price': 91.1},{'name': 'AAPL', 'shares': 50, 'price': 543.22},{'name': 'FB', 'shares': 200, 'price': 21.09},{'name': 'HPQ', 'shares': 35, 'price': 31.75},{'name': 'YHOO', 'shares': 45, 'price': 16.35},{'name': 'ACME', 'shares': 75, 'price': 115.65}
]
cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])
expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
#从堆中删除元素,返回值是堆中最小或者最大的元素
heapq.heappop(heap)

类类型
类类型,使用的是小于号_lt_,当然没有重写但是有其他的比较函数例如:le,gt,cmp,也是会调用的,和小于号等价的都可以调用(测试了gt),具体的这些操作之间的关系我也没有研究过。如果类里面没有重写_lt_,会调用其他的比较操作符,从源代码可以看出来,如果没有_lt_,那么会调用_ge_函数。
所以可以重写上述的那些函数:

class Skill(object):def __init__(self,priority,description):self.priority = priorityself.description = descriptiondef __lt__(self,other):#operator < return self.priority < other.prioritydef __ge__(self,other):#oprator >=return self.priority >= other.prioritydef __le__(self,other):#oprator <=return self.priority <= other.prioritydef __cmp__(self,other):#call global(builtin) function cmp for intreturn cmp(self.priority,other.priority)def __str__(self):return '(' + str(self.priority)+',\'' + self.description + '\')'def heapq_class():heap  = []heapq.heappush(heap,Skill(5,'proficient'))heapq.heappush(heap,Skill(10,'expert'))heapq.heappush(heap,Skill(1,'novice'))while heap:print heapq.heappop(heap),print 

查找最大或最小的 N 个元素

问题
怎样从一个集合中获得最大或者最小的 N 个元素列表?

堆数据结构最重要的特征是 heap[0] 永远是最小的元素。并且剩余的元素可以很容易的通过调用 heapq.heappop() 方法得到, 该方法会先将第一个元素弹出来,然后用下一个最小的元素来取代被弹出元素(这种操作时间复杂度仅仅是 O(log N),N 是堆大小)。 比如,如果想要查找最小的 3 个元素,你可以这样做:

>>> heapq.heappop(heap)
-4
>>> heapq.heappop(heap)
1
>>> heapq.heappop(heap)
2

当要查找的元素个数相对比较小的时候,函数 nlargest() 和 nsmallest() 是很合适的。 如果你仅仅想查找唯一的最小或最大(N=1)的元素的话,那么使用 min() 和 max() 函数会更快些。 类似的,如果 N 的大小和集合大小接近的时候,通常先排序这个集合然后再使用切片操作会更快点 ( sorted(items)[:N] 或者是 sorted(items)[-N:] )。 需要在正确场合使用函数 nlargest() 和 nsmallest() 才能发挥它们的优势 (如果 N 快接近集合大小了,那么使用排序操作会更好些)。

排序

sorted

#排序分静态、动态,平常序和指定序
#单级和多级都是静态的
#sorted 
###单级排序,数据结构可以是[[]]/[()]
a = [[0,'cc',12],[1,'ab',55],[2,'aa',30],[3,'bb',12]]
b = sorted(a, key = lambda x:x[2], reverse = True)
c = sorted(a, key = lambda x:x[2])
print('b: ',b)
print('c: ',c)
###多级排序
d = sorted(a,key = lambda x:(x[2],x[1]))
print('d: ',d)
####当数据结构是类对象时:
class element(object):def __init__(self,id=0,name='',age=0):self.id = idself.name = nameself.age = agedef __lt__(self,other):if self.age != other.age:return self.age < other.agereturn self.id < other.iddef __str__(self):return "id={0},name={1},age={2}".format(self.id,self.name,self.age)L = [element(0,'cc',12),element(1,'ab',55),element(2,'aa',30),element(3,'bb',12)]
l1 = sorted(L)
print('l1:')
for i in l1:print(i)
###动态根据用户指定的索引优先级序排序
index = [1,2]
key_set = ''
for i in range(len(index)):key_set += 'x['+str(index[i])+']'if i != len(index)-1:key_set += ','
e = sorted(a, key = lambda x:(eval(key_set)))
print('e: ',e)
###根据用户指定的index排序
class element2(object):index = [2,1,3,0]def __init__(self,id=0,name='',age=0):self.id = idself.name = nameself.age = agedef __lt__(self,other):return element2.index[self.id] < element2.index[other.id]def __str__(self):return "id={0},name={1},age={2}".format(self.id,self.name,self.age)L2 = [element2(0,'cc',12),element2(1,'ab',55),element2(2,'aa',30),element2(3,'bb',12)]
l2 = sorted(L2) #为什么用不了sort?
print('l2: ')
for i in l2:print(i)

#用指定序对list排序

a = [2,1,3]
seq = [2,1,0]
a = a.[seq] #实现倒序

查找

二分查找

def BinarySearch(array,t):low = 0height = len(array)-1while low < height:mid = (low+height)/2if array[mid] < t:low = mid + 1elif array[mid] > t:height = mid - 1else:return array[mid]return -1
if __name__ == "__main__":print BinarySearch([1,2,3,34,56,57,78,87],57)

查询树

#线段树通用版 点修改,区间查询。递归建树:O(nlogn) 修改:O(logn) 查询:O(logn)
class SegmentTree(object):def __init__(self, nums, l, r):if l == r:self.l = self.r = lself.v = nums[l]self.Lchild = self.Rchild = Nonereturnself.l = lself.r = rmid = (r + l) // 2self.Lchild = SegmentTree(nums,l,mid)self.Rchild = SegmentTree(nums,mid+1,r)self.v = self.Lchild.v + self.Rchild.vdef update(self, p, val):mid = (self.r+self.l) // 2if self.l == self.r and self.l == p:self.v = valreturnif self.l == self.r:returnif p <= mid:self.Lchild.update(p,val)else:self.Rchild.update(p,val)self.v = self.Lchild.v + self.Rchild.vdef query(self,ql,qr):mid = (self.r+self.l) // 2if ql <= self.l and qr >= self.r or self.l == self.r:return self.vif qr <= mid:rtn = self.Lchild.query(ql,qr)elif ql > mid:rtn = self.Rchild.query(ql,qr)else:rtn = self.Lchild.query(ql,qr) + self.Rchild.query(ql,qr)return rtnif __name__ == "__main__":a = SegmentTree([1,2,3,4],0,3)p1 = a.query(0,3)a.update(1,3)   p2 = a.query(0,3)print(p1,p2)   # 点修改,区间和询问 初始化:O(nlogn) 查询O(logn) 修改 O(logn)
def lowbit(x):return x&(-x)class BIT(object):def __init__(self,nums):self.length = len(nums)self.nums = numsself.tree = [0 for _ in range(self.length+1)]for i in range(len(nums)):k = i + 1while k <= self.length:self.tree[k] += nums[i]k += k&(-k)def update(self,p,v):diff = v - self.nums[p]i = p+1while i <= self.length:self.tree[i] += diffi += lowbit(i)def query(self,x,y): #左闭右闭rtn = 0i = xwhile i > 0:rtn -= self.tree[i]i -= lowbit(i)i = y+1while i > 0:rtn += self.tree[i]i -= lowbit(i)return rtnif __name__ == "__main__":test = BIT([1,2,3,4])print(test.query(0,3))test.update(3,6)print(test.query(0,3))# T315 Count of Smaller Numbers After Self
#Input: [5,2,6,1]   Output: [2,1,1,0] 
# Explanation:
# To the right of 5 there are 2 smaller elements (2 and 1).
# To the right of 2 there is only 1 smaller element (1).
# To the right of 6 there is 1 smaller element (1).
# To the right of 1 there is 0 smaller element.
# 归并求逆序对
# 第一种用到bisect就是从后往前插,插的位置就是前面比它小的个数
import bisect
class Solution(object):def countSmaller(self, nums):ans = []tmp = []for i in nums[::-1]:p = bisect.bisect_left(tmp,i)ans.insert(0,p)tmp.insert(p,i)return ans# 第二种是归并求逆序对的正确姿势。
class Solution:def countSmaller(self, nums):def sort(nums):half = len(nums) // 2if half:left,right = sort(nums[:half]),sort(nums[half:])for i in range(len(nums))[::-1]:if right and left and left[-1][1] > right[-1][1]:# print(left,right)ans[left[-1][0]] += len(right)nums[i] = left.pop()elif right:nums[i] = right.pop()else:nums[i] = left.pop()return numsans = [0]*len(nums)                    sort(list(enumerate(nums)))return ansif __name__ == "__main__":test = Solution()print(test.countSmaller([5,2,6,1]))#Given an array nums, we call (i, j) an important reverse pair if i < j and nums[i] > 2*nums[j].
#You need to return the number of important reverse pairs in the given array.
class Solution:def reversePairs(self, nums):""":type nums: List[int]:rtype: int"""cur = nums + [2*x for x in nums]cur.sort()# print(cur)rank = {a: i + 1 for i,a in enumerate(cur)}N = len(cur)bit = [0 for i in range(N+2)]     ans = 0for i in nums[::-1]:rtn = 0p = rank[i]-1while p > 0:rtn += bit[p]p -= p & (-p)ans += rtnp = rank[2*i]while p < N:bit[p] += 1p += p & (-p)return ans
if __name__ == "__main__":test = Solution()print(test.reversePairs([2,4,3,5,1]))       

图论

最短路(dijstra、bellmanford) + 前向星

# #考虑去重边
from collections import deque
class edge:def __init__(self, to, next, w):self.to = toself.next = nextself.w = w
n = 6 #顶点个数edges = []
head = [-1 for i in range(n+1)]
ecnt = 0def addEdge(f, to, w):global edgesglobal ecntglobal heade = edge(to, head[f], w)edges.append(e)head[f] = ecntecnt += 1#Bellman-ford算法适用于单源最短路径,图中边的权重可为负数即负权边,但不可以出现负权环。
#可以判负环
#如果约定有向加权图G不存在负权回路,即最短路径一定存在。就可以直接用来求最短路
# 如果没说存不存在负权回路,可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路
def Bellman_ford(start):#这种写法最差是O(nm),期望是O(Km),mean(K)<=2就是spfa,嗯spfa就是队列优化的bellman-fordQ = deque([start])inq = [0 for i in range(n+1)]inq[start] = 1d = [100000 for i in range(n+1)]cnt = [0 for i in range(n+1)] #记录各点入队次数while len(Q) > 0:cur = Q.popleft()inq[cur] = 0enm = head[cur]while enm != -1:e = edges[enm]if e.w + d[cur] < d[e.to]:d[e.to] = e.w + d[cur]Q.extend(e.to)inq[e.to] = 1cnt[e.to] += 1if cnt[e.to] > n:return None #存在负环enm = e.nextreturn d
#Dijstra
import time
import heapqclass Node:def __init__(self, name):self.name = nameself.vis = Falseself.adjacenciesList = []self.pre = Noneself.dis = 0x3f3f3f3f    def __lt__(self, other):return self.dis < other.disclass Edge:def __init__(self, weight, startvertex, endvertex):self.weight = weightself.startvertex = startvertexself.endvertex = endvertexdef calculateshortestpath(vertexlist, startvertex):q = []startvertex.dis = 0heapq.heappush(q, startvertex)while q:tmp = heapq.heappop(q)for edge in tmp.adjacenciesList:tempdist = edge.startvertex.dis + edge.weightif tempdist < edge.endvertex.dis:edge.endvertex.dis = tempdistedge.endvertex.pre = edge.startvertexheapq.heappush(q,edge.endvertex)
def getshortestpath(t):print("The value of it's minimum distance is: ",t.dis),node = twhile node:print(node.name),node = node.preprint(" ")
#主函数部分
node=[]
edge=[]
n=int(raw_input())
m=int(raw_input())
for i in range(n):node.append(Node(i+1)) #生成节点的名字
for i in range(m):a,b,c = map(int, raw_input().split())  #a到b的距离为cedge.append(Edge(c,node[a-1],node[b-1]))node[a-1].adjacenciesList.append(edge[i])
begin=time.clock()
calculateshortestpath(node,node[0])
for i in range(n):getshortestpath(node[i])
end=time.clock()
end-=begin
print(" ")
print("read :%f s" % end)

并查集

root = [i for i in range(n+1)]
def findRoot(me):if root[me] != me:root[me] = findRoot(root[me])return root[me]return medef union(a, b):ra = findRoot(a)rb = findRoot(b)if ra != rb:root[rb] = rareturn rareturn raglobal n
n,m = list(map(int,input().split(" ")))
for i in range(m):a, b = list(map(int,input().strip().split()))union(a,b)
for i in range(n+1):findRoot(i)
print(root)f, t, w = list(map(int,input().strip().split()))addEdge(f, t, w)
print(Dijkstra(1))

网络流

edmonds-karp

from collections import dequeclass edge:def __init__(self, frm, to, next, flow, cap):self.frm = frmself.to = toself.next = nextself.flow = flowself.cap = capn = 6 #顶点个数edges = []
head = [-1 for i in range(n+1)]
ecnt = 0def addEdge(frm, to, cap):global edgesglobal ecntglobal heade = edge(frm, to, head[frm], 0, cap)edges.append(e)head[frm] = ecntecnt += 1e = edge(to, frm, head[to], 0, 0)edges.append(e)head[to] = ecntecnt += 1
#简单 但不怎么用的maxflow
def Maxflow(s, t):a = [0 for i in range(n+1)]p = [-1 for i in range(n+1)]a[s] = 10000000while True:Q = deque([])Q.append(s)while len(Q) != 0:cur = Q.popleft()enum = head[cur]while enum != -1:e = edges[enum]if a[e.to] == 0 and e.cap > e.flow:a[e.to] = min(a[cur], e.cap - e.flow)p[e.to] = enumQ.append(e.to)enum = e.nextif a[t] == 0:breakif a[t] enum = p[t]cur = twhile enum != -1:edges[enum].flow += a[cur]edges[enum^1].flow -= a[cur]cur = edges[enum].fromenum = p[edges[enum].from]flow += a[t]return flow

测试

看时间

import time
start = time.time()
run_function()
end = time.time()

随机数据生成

import random
f = open('test.txt','w+',encoding = 'UTF-8')
n = 1000
m = random.randint(500, 10000)
f.write(str(n) + ' ' + str(m)+'\n')
for i in range(m):a = random.randint(1,n)b = random.randint(1,n)f.write(str(a) + ' ' + str(b)+'\n')
f.close()

参考资料

部分代码来自其他博客,链接过多,不贴了。多数来自此网站python3-cookbook

pdf版:https://pan.baidu.com/s/10jVobuY_sEq1bhjvHukksA

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. php获取时间(系统时间和网络时间)

    用php的时候可能经常会用到标准时间,有两个办法。 第一种方法:获取服务器的时间首先配置php.ini中的date.timezone = PRC或者直接在程序页面加入date_default_timezone_set("PRC"); 然后就可以使用time()或date(Y-m-d H:i:s)第二种方法:获取网络时间(这里是借用网…...

    2024/3/28 19:26:52
  2. js二进制十六进制转换

    1 转为二进制十六进制转换 var a=130; console.log(a.toString(2));/*10进制转换成2进制*/console.log(a.toString(8)); /*10进制转换成8进制*/console.log(a.toString(16)); /*10进制转换成16进制*/2 进制转换成10进制*/var b=10010110; console.log(parseInt(b,2)); …...

    2024/3/24 9:31:45
  3. 在virtualbox中安装win7

    1、首先下载一个win7镜像系统到电脑磁盘中。我百度云盘上有一个,也是从网上下载的http://pan.baidu.com/s/1o8zaCWU2、首先新建虚拟机1)点击左上角的“New”新建一个虚拟机,并给虚拟及取名子,因为我已经安装了一个win7了,在这里,我命名win7_2,选择操作系统类型和版本。2)…...

    2024/3/28 21:17:49
  4. Shiro视频分享

    权限开发框架之ShiroShiro介绍Shiro架构视频分享 Shiro介绍 Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。 Shiro架构1、Subject Subject即主体,外部应用与s…...

    2024/3/14 15:08:09
  5. MySQL的免安装版本的安装教程,还有各种坑的整合

    MySQL的免安装版本的最全安装教程还有各种坑 当时为了学spring安装的mysql,下下卸卸很多次,很多个版本,搜各种坑,这个坑补了,那个坑又来了,捣鼓了几天,暴躁好几天,就差没嚎,终于给弄好了,这里补一下当时没流的眼泪,就安装这玩意拖了我好几天的进程。呼哧呼哧。 1.下…...

    2024/3/27 1:03:27
  6. Android Studio 免安装版本

    免安装的程序我放到网盘了。地址http://pan.baidu.com/s/1mgNvbHA#path=%252FAndroid%252FAndroidStudio%25E5%25B7%25A5%25E5%2585%25B7接下来是安装教程这里总共有5个文件。首先知道电脑是多少位系统。电脑64位必须装64位jdk,(JDK要求必须7以上,这里提供了JDK8)。电脑32位…...

    2024/3/14 15:08:08
  7. thinkpad T480安装WIN7系统NVM固态硬盘+INTEL HD620显卡

    有同事需要将新购买的THINKPAD T480笔记本上安装WIN7,经过多次蓝屏后终于安装成功。主要问题在此款笔记本使用的是NVM固态硬盘,显卡使用的intel HD620首先下载技嘉的windowsimagetools,可以百度下载,按教程制作好Windows7 安装盘,制作时间大约要20分钟然后通过安装盘开始安…...

    2024/3/14 15:08:09
  8. 全网最简单的shiro教程第一节

    学习shiro之前先来了解一下RBAC模型,因为你shiro主要也是为这个模型服务的。RBAC模型:RBAC(Role-Based Access Control) 基于角色的访问控制。基本思想:对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。 每一种角色对应一组相应…...

    2024/3/14 15:08:05
  9. Linux一条命令----同步网络时间

    同步网络时间 [root@allen ~]# ntpdate cn.pool.ntp.org如下图:成功! 如提示命令不存在,直接输入:yum install ntp -y 安装ntp软件包...

    2024/3/14 15:08:04
  10. 实例源码5 --- 四位十六进制转换为十进制

    这个问题是在处理485解帧时,存在几位十六进制代表所需要的值,想知道一种方法直接得到所需的值解决方法:http://bbs.csdn.net/topics/391029805问题:例如:char sDec[4] = {0x05,0xc5,0xb3,0xea};怎样把 0x05,0xc5,0xb3,0xea 组合成一个十六进制数 0x05c5b3ea ,并且把 0x05…...

    2024/3/14 15:08:03
  11. 数字加网(三)— —调频加网算法及实现

    数字加网(一)— —概念及分色合成 数字加网(二)— —调幅加网算法及实现 数字加网(三)— —调频加网算法及实现调频加网算法主要是抖动法与误差扩散法,前者又可以分为有序抖动和无序抖动,是点过程;后者是相邻过程。有序抖动算法Bayer抖动算法算法公式最具代表性的有…...

    2024/3/19 2:55:26
  12. Mysql免安装版下载与配置

    Mysql分为安装版(.exe版)和免安装版安装版当然是正常软件,下一步了就不多说了。对于萌新有个小提醒:mysql社区版下载目前有高版本8和低版本5。建议使用版本5在此附上mysql官方链接:https://dev.mysql.com/downloads/选择Community社区进去默认是8.0版本右面选择其他版本下…...

    2024/3/13 23:00:46
  13. 全网最简单的shiro教程第二节

    Shiro是什么?shiro是Apache提供的一个强大且易用的Java安全框架,执行身份验证,授权、密码和会话管理。优势:使用shiro的易于理解的API,可以快速、轻松的获取任何应用程序。Shiro特性以及理解:Shiro特性及理解Authentication : 身份认证/登录,验证用户是不是拥有相应的身…...

    2024/3/13 23:00:44
  14. C语言实现16进制到2进制的转换

    今天帮同学看代码,她想实现把16进制的数转换成2进制显示,百度了一下,代码是不少,但是都太长了,想起C和指针里面有似曾相识的东西,就自己写了一下,还是遇到了一些问题。1. 没有注意到字符串存储的时候后面会自动加一个\0,因此想存放一个长度为n的字符串,需要开辟n + 1 …...

    2024/3/13 23:00:46
  15. 重装系统Win7步骤和详细教程

    首先,重装系统之前需要将电脑中的重要资料备份或转移,根据自己情况,把一些较重要的文件移动到别的盘(只要不是C盘就行)。 下载Onekey ghost和Win7系统镜像 OneKey Ghost地址:http://url456.com/onekey Win7系统映像地址:http://url456.com/win7-64 注:下载后不要保存在…...

    2024/3/13 23:00:42
  16. Android 通过NTP服务器自动获取时间的方法

    对于手机,如果有SIM卡支持的话,在设置时间时可以通过选择自动从网络获取时间来取得当地的时间和时区:但如果手机没有SIM卡,此时如果有Wifi链接,手机依然可以通过网络自动获取时间(时区此时需要手动设置)。 查看Android源码,在android.net 中有 SntpClient类,可以通过访…...

    2024/3/14 15:08:01
  17. ASCII码与16进制转换对照表

    十六进制代码MCS 字符或缩写DEC 多国字符名ASCII 控制字符 100NUL空字符01SOH标题起始 (Ctrl/A)02STX文本起始 (Ctrl/B)03ETX文本结束 (Ctrl/C)04EOT传输结束 (Ctrl/D)05ENQ询问 (Ctrl/E)06ACK认可 (Ctrl/F)07BEL铃 (Ctrl/G)08BS退格 (Ctrl/H)09HT水平制表栏 (Ctrl/I)0ALF换行 …...

    2024/3/14 15:08:02
  18. MAC使用Bootcamp安装win7

    1.准备工作(1)win7镜像,下载地址(官网或者msdn)(2)符合Mac版本的bootcamp驱动(注:我的mac版本是8.5 ,不同的版本根据实际需求下载Bootcamp)。(下载网址:https://support.apple.com/en-us/HT205016)(3)8G以上的U盘(4)下载Paragon NTFS for MAC或其他软件用于改…...

    2024/3/14 15:07:59
  19. B/S中客户端与服务器时间不一致的问题(服务器比客户端时间满了几秒)

    本人开发中遇到一个问题如下:request headersPOST /user/login HTTP/1.1 Host: www.linhongzhao.com Connection: keep-alive Content-Length: 194 Pragma: no-cache Cache-Control: no-cache Origin: http://www.linhongzhao.com User-Agent: Mozilla/5.0 (X11; Linux x86_64…...

    2024/3/14 15:07:58
  20. 运动目标跟踪主流算法大致分类

    运动目标跟踪主流算法大致分类不全,需要慢慢补充一.运动目标检测(一)背景差1.帧差2.GMM背景减算法可以对背景的光照变化、噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标。因此对于固定摄像头的情形,目前大多数的跟踪算法中都采用背景减…...

    2024/3/14 15:07:57

最新文章

  1. 大型语言模型(LLM)全解读

    大型语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是指使用大规模数据集进行预训练的神经网络模型&#xff0c;用于生成人类类似的自然语言文本。LLM在自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;领域有着广泛的…...

    2024/3/28 22:22:19
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. oracle 19c 打补丁教程

    感谢大家的关注&#xff0c;针对上篇文章分析的19c的补丁包部分这里分享一下之前记录的打补丁手册 希望对大家有帮助&#xff01; oracle patch 大全&#xff08;更新至2024-03&#xff09;-CSDN博客这里是补丁下载地址 oracle 19CRAC打补丁到19.20 本文是简洁版只有步骤和…...

    2024/3/28 20:59:59
  4. 第六届蓝桥杯大赛软件赛省赛Java 大学C组题解

    文章目录 A 隔行变色思路解题方法复杂度Code B 立方尾不变思路解题方法复杂度Code C 无穷分数思路解题方法复杂度Code D 奇妙的数字思路解题方法复杂度Code E 移动距离思路解题方法复杂度Code F 垒骰子思路解题方法复杂度Code A 隔行变色 思路 这是一个简单的计数问题。我们需…...

    2024/3/28 10:29:22
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/18 12:12:47
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/24 20:11:23
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/26 20:58:42
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/24 5:55:47
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/27 10:28:22
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/26 23:04:51
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/26 11:20:25
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/24 20:11:18
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/28 9:10:53
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/24 20:11:16
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/24 20:11:15
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/27 7:12:50
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/24 20:11:13
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/26 11:21:23
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/28 12:42:28
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57