@@ -294,6 +294,15 @@ def get_lines():
294
294
for i in f:
295
295
yield i
296
296
```
297
+ 个人认为:还是设置下每次返回的行数较好,否则读取次数太多。
298
+ ```
299
+ def get_lines():
300
+ l = []
301
+ with open('file.txt','rb') as f:
302
+ data = f.readlines(60000)
303
+ l.append(data)
304
+ yield l
305
+ ```
297
306
Pandaaaa906提供的方法
298
307
``` python
299
308
from mmap import mmap
@@ -355,6 +364,7 @@ print(alist)
355
364
``` python
356
365
sorted (d.items(),key = lambda x :x[1 ])
357
366
```
367
+ x[0]代表用key进行排序;x[1]代表用value进行排序。
358
368
### 6.字典推导式
359
369
``` python
360
370
d = {key:value for (key,value) in iterable}
@@ -443,6 +453,10 @@ c. Python2里面继承object的是新式类,没有写父类的是经典类
443
453
444
454
d. 经典类目前在Python里基本没有应用
445
455
456
+ e. 保持class与type的统一对新式类的实例执行a.__ class__ 与type(a)的结果是一致的,对于旧式类来说就不一样了。
457
+
458
+ f.对于多重继承的属性搜索顺序不一样新式类是采用广度优先搜索,旧式类采用深度优先搜索。
459
+
446
460
### 16.python中内置的数据结构有几种?
447
461
a. 整型 int、 长整型 long、浮点型 float、 复数 complex
448
462
@@ -553,14 +567,14 @@ get_files("./",'.pyc')
553
567
import os
554
568
555
569
def pick (obj ):
556
- if ob .endswith(" .pyc" ):
570
+ if obj .endswith(" .pyc" ):
557
571
print (obj)
558
572
559
573
def scan_path (ph ):
560
574
file_list = os.listdir(ph)
561
575
for obj in file_list:
562
576
if os.path.isfile(obj):
563
- pick(obj)
577
+ pick(obj)
564
578
elif os.path.isdir(obj):
565
579
scan_path(obj)
566
580
@@ -768,6 +782,17 @@ target = 9
768
782
nums = solution.twoSum(list ,target)
769
783
print (nums)
770
784
```
785
+
786
+ ```
787
+
788
+ class Solution(object):
789
+ def twoSum(self, nums, target):
790
+ for i in range(len(nums)):
791
+ num = target - nums[i]
792
+ if num in nums[i+1:]:
793
+ return [i, nums.index(num,i+1)]
794
+
795
+ ```
771
796
给列表中的字典排序:假设有如下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}]
772
797
``` python
773
798
alist_sort = sorted (alist,key = lambda e : e.__getitem__ (' age' ),reverse = True )
@@ -1580,17 +1605,132 @@ class MyCls(object):
1580
1605
1581
1606
## 正则表达式
1582
1607
### 94.请写出一段代码用正则匹配出ip?
1608
+
1583
1609
### 95.a = “abbbccc”,用正则匹配为abccc,不管有多少b,就出现一次?
1610
+ 思路:不管有多少个b替换成一个
1611
+
1612
+ re.sub(r'b+', 'b', a)
1584
1613
### 96.Python字符串查找和替换?
1585
- ### 97.用Python匹配HTML g tag的时候,<.> 和 <.* ?> 有什么区别
1614
+ a、str.find():正序字符串查找函数
1615
+ 函数原型:
1616
+ str.find(substr [,pos_start [,pos_end ] ] )
1617
+ 返回str中第一次出现的substr的第一个字母的标号,如果str中没有substr则返回-1,也就是说从左边算起的第一次出现的substr的首字母标号。
1618
+
1619
+ 参数说明:
1620
+ str:代表原字符串
1621
+ substr:代表要查找的字符串
1622
+ pos_start:代表查找的开始位置,默认是从下标0开始查找
1623
+ pos_end:代表查找的结束位置
1624
+
1625
+ 例子:
1626
+ 'aabbcc.find('bb')' # 2
1627
+
1628
+ b、str.index():正序字符串查找函数
1629
+ index()函数类似于find()函数,在Python中也是在字符串中查找子串第一次出现的位置,跟find()不同的是,未找到则抛出异常。
1630
+
1631
+ 函数原型:
1632
+ str.index(substr [, pos_start, [ pos_end ] ] )
1633
+
1634
+ 参数说明:
1635
+ str:代表原字符串
1636
+ substr:代表要查找的字符串
1637
+ pos_start:代表查找的开始位置,默认是从下标0开始查找
1638
+ pos_end:代表查找的结束位置
1639
+
1640
+ 例子:
1641
+ 'acdd l1 23'.index(' ') # 4
1642
+
1643
+ c、str.rfind():倒序字符串查找函数
1644
+
1645
+ 函数原型:
1646
+ str.rfind( substr [, pos_start [,pos_ end ] ])
1647
+ 返回str中最后出现的substr的第一个字母的标号,如果str中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号。
1648
+
1649
+ 参数说明:
1650
+ str:代表原字符串
1651
+ substr:代表要查找的字符串
1652
+ pos_start:代表查找的开始位置,默认是从下标0开始查找
1653
+ pos_end:代表查找的结束位置
1654
+
1655
+ 例子:
1656
+ 'adsfddf'.rfind('d') # 5
1657
+
1658
+ d、str.rindex():倒序字符串查找函数
1659
+ rindex()函数类似于rfind()函数,在Python中也是在字符串中倒序查找子串最后一次出现的位置,跟rfind()不同的是,未找到则抛出异常。
1660
+
1661
+ 函数原型:
1662
+ str.rindex(substr [, pos_start, [ pos_end ] ] )
1663
+
1664
+ 参数说明:
1665
+ str:代表原字符串
1666
+ substr:代表要查找的字符串
1667
+ pos_start:代表查找的开始位置,默认是从下标0开始查找
1668
+ pos_end:代表查找的结束位置
1669
+
1670
+ 例子:
1671
+ 'adsfddf'.rindex('d') # 5
1672
+
1673
+ e、使用re模块进行查找和替换:
1674
+ 函数 | 说明
1675
+ ---|---
1676
+ re.match(pat, s) | 只从字符串s的头开始匹配,比如(‘123’, ‘12345’)匹配上了,而(‘123’,’01234’)就是没有匹配上,没有匹配上返回None,匹配上返回matchobject
1677
+ re.search(pat, s) | 从字符串s的任意位置都进行匹配,比如(‘123’,’01234’)就是匹配上了,只要s只能存在符合pat的连续字符串就算匹配上了,没有匹配上返回None,匹配上返回matchobject
1678
+ re.sub(pat,newpat,s) | re.sub(pat,newpat,s) 对字符串中s的包含的所有符合pat的连续字符串进行替换,如果newpat为str,那么就是替换为newpat,如果newpat是函数,那么就按照函数返回值替换。sub函数两个有默认值的参数分别是count表示最多只处理前几个匹配的字符串,默认为0表示全部处理;最后一个是flags,默认为0
1679
+
1680
+ f、使用replace()进行替换:
1681
+ 基本用法:对象.replace(rgExp,replaceText,max)
1682
+
1683
+ 其中,rgExp和replaceText是必须要有的,max是可选的参数,可以不加。
1684
+ rgExp是指正则表达式模式或可用标志的正则表达式对象,也可以是 String 对象或文字;
1685
+ replaceText是一个String 对象或字符串文字;
1686
+ max是一个数字。
1687
+ 对于一个对象,在对象的每个rgExp都替换成replaceText,从左到右最多max次。
1688
+
1689
+ s1='hello world'
1690
+ s1.replace('world','liming')
1691
+
1692
+ ### 97.用Python匹配HTML tag的时候,<.* > 和 <.* ?> 有什么区别
1693
+ 第一个代表贪心匹配,第二个代表非贪心;
1694
+ ?在一般正则表达式里的语法是指的"零次或一次匹配左边的字符或表达式"相当于{0,1}
1695
+ 而当?后缀于*,+,?,{n},{n,},{n,m}之后,则代表非贪心匹配模式,也就是说,尽可能少的匹配左边的字符或表达式,这里是尽可能少的匹配.(任意字符)
1696
+
1697
+ 所以:第一种写法是,尽可能多的匹配,就是匹配到的字符串尽量长,第二中写法是尽可能少的匹配,就是匹配到的字符串尽量短。
1698
+ 比如<tag>tag>tag>end,第一个会匹配<tag>tag>tag>,第二个会匹配<tag>。
1586
1699
### 98.正则表达式贪婪与非贪婪模式的区别?
1700
+ 贪婪模式:
1701
+ 定义:正则表达式去匹配时,会尽量多的匹配符合条件的内容
1702
+ 标识符:+,?,*,{n},{n,},{n,m}
1703
+ 匹配时,如果遇到上述标识符,代表是贪婪匹配,会尽可能多的去匹配内容
1704
+
1705
+ 非贪婪模式:
1706
+ 定义:正则表达式去匹配时,会尽量少的匹配符合条件的内容 也就是说,一旦发现匹配符合要求,立马就匹配成功,而不会继续匹配下去(除非有g,开启下一组匹配)
1707
+ 标识符:+?,??,*?,{n}?,{n,}?,{n,m}?
1708
+ 可以看到,非贪婪模式的标识符很有规律,就是贪婪模式的标识符后面加上一个?
1709
+
1710
+ 参考文章:https://dailc.github.io/2017/07/06/regularExpressionGreedyAndLazy.html
1711
+
1587
1712
### 99.写出开头匹配字母和下划线,末尾是数字的正则表达式?
1713
+ s1='_aai0efe00'
1714
+ res=re.findall('^[a-zA-Z_]?[a-zA-Z0-9_]{1,}\d$',s1)
1715
+ print(res)
1716
+
1588
1717
### 100.正则表达式操作
1589
1718
### 101.请匹配出变量A 中的json字符串。
1590
1719
### 102.怎么过滤评论中的表情?
1720
+ 思路:主要是匹配表情包的范围,将表情包的范围用空替换掉
1721
+ ```
1722
+ import re
1723
+ pattern = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
1724
+ pattern.sub('',text)
1725
+
1726
+ ```
1591
1727
### 103.简述Python里面search和match的区别
1728
+ match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None;
1729
+ search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
1730
+
1592
1731
### 104.请写出匹配ip的Python正则表达式
1593
1732
### 105.Python里match与search的区别?
1733
+ 见103题
1594
1734
1595
1735
## 系统编程
1596
1736
### 106.进程总结
0 commit comments