Skip to content

Commit d6f2c09

Browse files
committed
update 46-47
1 parent b36fcf7 commit d6f2c09

File tree

1 file changed

+51
-123
lines changed

1 file changed

+51
-123
lines changed

README.md

Lines changed: 51 additions & 123 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的线程同步)
@@ -271,7 +271,10 @@
271271
- [244.怎么在海量数据中找出重复次数最多的一个?](#244怎么在海量数据中找出重复次数最多的一个)
272272
- [245.判断数据是否在大量数据中](#245判断数据是否在大量数据中)
273273

274+
275+
274276
<!-- /TOC -->
277+
275278
# Python基础
276279
## 文件操作
277280
### 1.有一个jsonline格式的文件file.txt大小约为10K
@@ -440,8 +443,6 @@ c. Python2里面继承object的是新式类,没有写父类的是经典类
440443

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

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

@@ -743,26 +744,33 @@ def atoi(s):
743744
return reduce(lambda num, v: num * 10 + ord(v) - ord('0'), s, 0)
744745
```
745746
### 29.Given an array of integers
746-
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定`nums = [2, 7, 11, 15]`, `target=9` 因为 `nums[0] + nums[1] = 2 + 7 = 9`,所以返回 `[0, 1]`
747+
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定nums = [2,7,11,15],target=9 因为 nums[0]+nums[1] = 2+7 =9,所以返回[0,1]
747748
```python
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]
749+
class Solution:
750+
def twoSum(self,nums,target):
751+
"""
752+
:type nums: List[int]
753+
:type target: int
754+
:rtype: List[int]
755+
"""
756+
d = {}
757+
size = 0
758+
while size < len(nums):
759+
if target-nums[size] in d:
760+
if d[target-nums[size]] <size:
761+
return [d[target-nums[size]],size]
762+
else:
763+
d[nums[size]] = size
764+
size = size +1
765+
solution = Solution()
766+
list = [2,7,11,15]
759767
target = 9
760-
result = two_sum(list_, target)
761-
print(result) # [0, 1]
768+
nums = solution.twoSum(list,target)
769+
print(nums)
762770
```
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}]`
771+
给列表中的字典排序:假设有如下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}]
764772
```python
765-
alist_sort = sorted(alist, key=lambda e: e.get("age"), reverse=True)
773+
alist_sort = sorted(alist,key=lambda e: e.__getitem__('age'),reverse=True)
766774
```
767775

768776
### 30.python代码实现删除一个list里面的重复元素
@@ -1035,8 +1043,32 @@ class Array:
10351043
### 45.介绍Cython,Pypy Cpython Numba各有什么缺点
10361044
Cython
10371045
### 46.请描述抽象类和接口类的区别和联系
1046+
1047+
1.抽象类: 规定了一系列的方法,并规定了必须由继承类实现的方法。由于有抽象方法的存在,所以抽象类不能实例化。可以将抽象类理解为毛坯房,门窗,墙面的样式由你自己来定,所以抽象类与作为基类的普通类的区别在于约束性更强
1048+
1049+
2.接口类:与抽象类很相似,表现在接口中定义的方法,必须由引用类实现,但他与抽象类的根本区别在于用途:与不同个体间沟通的规则,你要进宿舍需要有钥匙,这个钥匙就是你与宿舍的接口,你的舍友也有这个接口,所以他也能进入宿舍,你用手机通话,那么手机就是你与他人交流的接口
1050+
1051+
3.区别和关联:
1052+
1053+
1.接口是抽象类的变体,接口中所有的方法都是抽象的,而抽象类中可以有非抽象方法,抽象类是声明方法的存在而不去实现它的类
1054+
1055+
2.接口可以继承,抽象类不行
1056+
1057+
3.接口定义方法,没有实现的代码,而抽象类可以实现部分方法
1058+
1059+
4.接口中基本数据类型为static而抽象类不是
1060+
10381061
### 47.Python中如何动态获取和设置对象的属性?
10391062

1063+
```python
1064+
if hasattr(Parent, 'x'):
1065+
print(getattr(Parent, 'x'))
1066+
setattr(Parent, 'x',3)
1067+
print(getattr(Parent,'x'))
1068+
```
1069+
1070+
1071+
10401072
## 内存管理与垃圾回收机制
10411073
### 48.哪些操作会导致Python内存溢出,怎么处理?
10421074
### 49.关于Python内存管理,下列说法错误的是 B
@@ -1548,18 +1580,7 @@ class MyCls(object):
15481580

15491581
## 正则表达式
15501582
### 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-
```
15561583
### 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-
```
15631584
### 96.Python字符串查找和替换?
15641585
### 97.用Python匹配HTML g tag的时候,<.> 和 <.*?> 有什么区别
15651586
### 98.正则表达式贪婪与非贪婪模式的区别?
@@ -1571,56 +1592,6 @@ def remove_b(test_str):
15711592
### 104.请写出匹配ip的Python正则表达式
15721593
### 105.Python里match与search的区别?
15731594

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-
16241595
## 系统编程
16251596
### 106.进程总结
16261597
进程:程序运行在操作系统上的一个实例,就称之为进程。进程需要相应的系统资源:内存、时间片、pid。
@@ -2447,49 +2418,6 @@ redis检查内存使用情况,如果大于maxmemory的限制,则根据设定
24472418

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

0 commit comments

Comments
 (0)