120
120
- [ 系统编程] ( #系统编程 )
121
121
- [ 106.进程总结] ( #106进程总结 )
122
122
- [ 107.谈谈你对多进程,多线程,以及协程的理解,项目是否用?] ( #107谈谈你对多进程多线程以及协程的理解项目是否用 )
123
- - [ 108.Python异常使用场景有那些 ?] ( #108python异常使用场景有那些 )
123
+ - [ 108.Python异步使用场景有那些 ?] ( #108python异步使用场景有那些 )
124
124
- [ 109.多线程共同操作同一个数据互斥锁同步?] ( #109多线程共同操作同一个数据互斥锁同步 )
125
125
- [ 110.什么是多线程竞争?] ( #110什么是多线程竞争 )
126
126
- [ 111.请介绍一下Python的线程同步?] ( #111请介绍一下python的线程同步 )
@@ -440,6 +440,8 @@ c. Python2里面继承object的是新式类,没有写父类的是经典类
440
440
441
441
d. 经典类目前在Python里基本没有应用
442
442
443
+ e.经典类的MRO是深度优先搜索,新式类的MRO是广度优先搜索
444
+
443
445
### 16.python中内置的数据结构有几种?
444
446
a. 整型 int、 长整型 long、浮点型 float、 复数 complex
445
447
@@ -741,33 +743,26 @@ def atoi(s):
741
743
return reduce (lambda num , v : num * 10 + ord (v) - ord (' 0' ), s, 0 )
742
744
```
743
745
### 29.Given an array of integers
744
- 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定nums = [ 2,7, 11,15] , target=9 因为 nums[ 0] + nums[ 1] = 2+ 7 =9 ,所以返回[ 0,1 ]
746
+ 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 ` nums = [2, 7, 11, 15]` , ` target=9 ` 因为 ` nums[0] + nums[1] = 2 + 7 = 9 ` ,所以返回 ` [0, 1] `
745
747
``` python
746
- class Solution :
747
- def twoSum (self ,nums ,target ):
748
- """
749
- :type nums: List[int]
750
- :type target: int
751
- :rtype: List[int]
752
- """
753
- d = {}
754
- size = 0
755
- while size < len (nums):
756
- if target- nums[size] in d:
757
- if d[target- nums[size]] < size:
758
- return [d[target- nums[size]],size]
759
- else :
760
- d[nums[size]] = size
761
- size = size + 1
762
- solution = Solution()
763
- list = [2 ,7 ,11 ,15 ]
748
+ from typing import List
749
+
750
+ def two_sum (nums : List[int ], target : int ) -> List[int ]:
751
+ s = {}
752
+ for i, n in enumerate (nums):
753
+ if (target- n) in s:
754
+ return [s[target- n], i]
755
+ else :
756
+ s[n] = i
757
+
758
+ nums = [2 , 7 , 11 , 15 ]
764
759
target = 9
765
- nums = solution.twoSum( list , target)
766
- print (nums)
760
+ result = two_sum(list_, target)
761
+ print (result) # [0, 1]
767
762
```
768
- 给列表中的字典排序:假设有如下list对象, alist= [ {"name":"a","age":20},{"name":"b","age":30},{"name":"c","age":25}] ,将alist中的元素按照age从大到小排序 alist= [ {"name":"a", "age":20}, {"name":"b", "age":30}, {"name":"c", "age":25} ]
763
+ 给列表中的字典排序:假设有如下 list 对象, ` alist = [{"name": "a", "age": 20}, {"name": "b", "age": 30}, {"name": "c", "age": 25}] ` , 将alist中的元素按照 age 从大到小排序 ` alist_sort = [{"name": "b", "age": 30}, {"name": "c", "age": 25}, {"name": "a", "age": 20}] `
769
764
``` python
770
- alist_sort = sorted (alist,key = lambda e : e.__getitem__ ( ' age' ), reverse = True )
765
+ alist_sort = sorted (alist, key = lambda e : e.get( " age" ), reverse = True )
771
766
```
772
767
773
768
### 30.python代码实现删除一个list里面的重复元素
@@ -1553,7 +1548,18 @@ class MyCls(object):
1553
1548
1554
1549
## 正则表达式
1555
1550
### 94.请写出一段代码用正则匹配出ip?
1551
+ ``` python
1552
+ def ip_match (ip_str ):
1553
+ partterns = re.compile(r " ( 2( 5[0-5 ]{1} | [0-4 ]\d {1} ) | [0-1 ]? \d {1,2} ) ( \. ( 2( 5[0-5 ]{1} | [0-4 ]\d {1} ) | [0-1 ]? \d {1,2} )) {3} " )
1554
+ print (partterns.search(ip_str).group(0 ))
1555
+ ```
1556
1556
### 95.a = “abbbccc”,用正则匹配为abccc,不管有多少b,就出现一次?
1557
+ ``` python
1558
+ def remove_b (test_str ):
1559
+ res = re.compile(' (?<=a).*?(?=c)' )
1560
+ ret = res.sub(" b" ,test_str)
1561
+ print (ret)
1562
+ ```
1557
1563
### 96.Python字符串查找和替换?
1558
1564
### 97.用Python匹配HTML g tag的时候,<.> 和 <.* ?> 有什么区别
1559
1565
### 98.正则表达式贪婪与非贪婪模式的区别?
@@ -1565,6 +1571,56 @@ class MyCls(object):
1565
1571
### 104.请写出匹配ip的Python正则表达式
1566
1572
### 105.Python里match与search的区别?
1567
1573
1574
+ match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。它的一般使用形式如下:
1575
+
1576
+ ``` python
1577
+ match (string[, pos[, endpos]])
1578
+ 其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。因此,** 当你不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部** 。
1579
+ 当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None 。
1580
+ >> > import re
1581
+ >> > pattern = re.compile(r ' \d + ' ) # 用于匹配至少一个数字
1582
+ >> > m = pattern.match(' one12twothree34four' ) # 查找头部,没有匹配
1583
+ >> > print m
1584
+ None
1585
+ >> > m = pattern.match(' one12twothree34four' , 2 , 10 ) # 从'e'的位置开始匹配,没有匹配
1586
+ >> > print m
1587
+ None
1588
+ >> > m = pattern.match(' one12twothree34four' , 3 , 10 ) # 从'1'的位置开始匹配,正好匹配
1589
+ >> > print m # 返回一个 Match 对象
1590
+ < _sre.SRE_Match object at 0x 10a42aac0>
1591
+ >> > m.group(0 ) # 可省略 0
1592
+ ' 12'
1593
+ >> > m.start(0 ) # 可省略 0
1594
+ 3
1595
+ >> > m.end(0 ) # 可省略 0
1596
+ 5
1597
+ >> > m.span(0 ) # 可省略 0
1598
+ (3 , 5 )
1599
+ ```
1600
+ ## search 方法
1601
+
1602
+ search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下:
1603
+ search(string[ , pos[ , endpos]] )
1604
+ 其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。
1605
+
1606
+ 当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
1607
+ ``` python
1608
+ >> > import re
1609
+ >> > pattern = re.compile(' \d+' )
1610
+ >> > m = pattern.search(' one12twothree34four' ) # 这里如果使用 match 方法则不匹配
1611
+ >> > m
1612
+ < _sre.SRE_Match object at 0x 10cc03ac0>
1613
+ >> > m.group()
1614
+ ' 12'
1615
+ >> > m = pattern.search(' one12twothree34four' , 10 , 30 ) # 指定字符串区间
1616
+ >> > m
1617
+ < _sre.SRE_Match object at 0x 10cc03b28>
1618
+ >> > m.group()
1619
+ ' 34'
1620
+ >> > m.span()
1621
+ (13 , 15 )
1622
+ ```
1623
+
1568
1624
## 系统编程
1569
1625
### 106.进程总结
1570
1626
进程:程序运行在操作系统上的一个实例,就称之为进程。进程需要相应的系统资源:内存、时间片、pid。
@@ -2391,6 +2447,49 @@ redis检查内存使用情况,如果大于maxmemory的限制,则根据设定
2391
2447
2392
2448
## 数据结构
2393
2449
### 222.数组中出现次数超过一半的数字-Python版
2450
+
2451
+ #### 方法一
2452
+
2453
+ ``` python
2454
+ def majority_element (nums ):
2455
+ nums.sort()
2456
+ return nums[len (nums) // 2 ]
2457
+ ```
2458
+
2459
+ #### 方法二
2460
+
2461
+ ``` python
2462
+ from functools import reduce
2463
+
2464
+
2465
+ def majority_element (nums ):
2466
+ return reduce (lambda n , x : (n[0 ], n[1 ] + 1 ) if n[0 ] == x else ((x, 1 ) if n[1 ] - 1 < 0 else (n[0 ], n[1 ] - 1 )), nums, (None , - 1 ))[0 ]
2467
+ ```
2468
+
2469
+ #### 方法三
2470
+
2471
+ ``` python
2472
+ from collections import Counter
2473
+
2474
+
2475
+ def majority_element (nums ):
2476
+ return Counter(nums).most_common(1 )[0 ][0 ]
2477
+ ```
2478
+
2479
+ #### 方法四
2480
+
2481
+ ``` python
2482
+ from random import choice
2483
+
2484
+
2485
+ def majority_element (nums ):
2486
+ length = len (nums) // 2
2487
+ while True :
2488
+ n = choice(nums)
2489
+ if nums.count(n) > length:
2490
+ return n
2491
+ ```
2492
+
2394
2493
### 223.求100以内的质数
2395
2494
### 224.无重复字符的最长子串-Python实现
2396
2495
### 225.通过2个5/6升得水壶从池塘得到3升水
0 commit comments