Skip to content

Commit b36fcf7

Browse files
committed
2 parents 4ef4cdc + 1bb43b3 commit b36fcf7

File tree

1 file changed

+123
-24
lines changed

1 file changed

+123
-24
lines changed

README.md

Lines changed: 123 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
- [系统编程](#系统编程)
121121
- [106.进程总结](#106进程总结)
122122
- [107.谈谈你对多进程,多线程,以及协程的理解,项目是否用?](#107谈谈你对多进程多线程以及协程的理解项目是否用)
123-
- [108.Python异常使用场景有那些](#108python异常使用场景有那些)
123+
- [108.Python异步使用场景有那些](#108python异步使用场景有那些)
124124
- [109.多线程共同操作同一个数据互斥锁同步?](#109多线程共同操作同一个数据互斥锁同步)
125125
- [110.什么是多线程竞争?](#110什么是多线程竞争)
126126
- [111.请介绍一下Python的线程同步?](#111请介绍一下python的线程同步)
@@ -440,6 +440,8 @@ c. Python2里面继承object的是新式类,没有写父类的是经典类
440440

441441
d. 经典类目前在Python里基本没有应用
442442

443+
e.经典类的MRO是深度优先搜索,新式类的MRO是广度优先搜索
444+
443445
### 16.python中内置的数据结构有几种?
444446
a. 整型 int、 长整型 long、浮点型 float、 复数 complex
445447

@@ -741,33 +743,26 @@ def atoi(s):
741743
return reduce(lambda num, v: num * 10 + ord(v) - ord('0'), s, 0)
742744
```
743745
### 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]`
745747
```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]
764759
target = 9
765-
nums = solution.twoSum(list,target)
766-
print(nums)
760+
result = two_sum(list_, target)
761+
print(result) # [0, 1]
767762
```
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}]`
769764
```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)
771766
```
772767

773768
### 30.python代码实现删除一个list里面的重复元素
@@ -1553,7 +1548,18 @@ class MyCls(object):
15531548

15541549
## 正则表达式
15551550
### 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+
```
15561556
### 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+
```
15571563
### 96.Python字符串查找和替换?
15581564
### 97.用Python匹配HTML g tag的时候,<.> 和 <.*?> 有什么区别
15591565
### 98.正则表达式贪婪与非贪婪模式的区别?
@@ -1565,6 +1571,56 @@ class MyCls(object):
15651571
### 104.请写出匹配ip的Python正则表达式
15661572
### 105.Python里match与search的区别?
15671573

1574+
match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。它的一般使用形式如下:
1575+
1576+
```python
1577+
match(string[, pos[, endpos]])
1578+
其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0len (字符串长度)。因此,**当你不指定 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 0x10a42aac0>
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 0x10cc03ac0>
1613+
>>> m.group()
1614+
'12'
1615+
>>> m = pattern.search('one12twothree34four', 10, 30) # 指定字符串区间
1616+
>>> m
1617+
<_sre.SRE_Match object at 0x10cc03b28>
1618+
>>> m.group()
1619+
'34'
1620+
>>> m.span()
1621+
(13, 15)
1622+
```
1623+
15681624
## 系统编程
15691625
### 106.进程总结
15701626
进程:程序运行在操作系统上的一个实例,就称之为进程。进程需要相应的系统资源:内存、时间片、pid。
@@ -2391,6 +2447,49 @@ redis检查内存使用情况,如果大于maxmemory的限制,则根据设定
23912447

23922448
## 数据结构
23932449
### 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+
23942493
### 223.求100以内的质数
23952494
### 224.无重复字符的最长子串-Python实现
23962495
### 225.通过2个5/6升得水壶从池塘得到3升水

0 commit comments

Comments
 (0)