目录
看到本文标题中“一行python,十行C++”(开发效率),我自己都不服;但我还有一句话没说:十行C++,一行python(速度)。
这17个技巧中有很多非常适合文本处理的技巧,而文本处理的应用领域可以非常广泛。
简洁往往意味着晦涩难懂,是时候见证基础强弱了。
1、交换变量值
>>> a,b=5,10
>>> print(a,b)
5 10
>>> a,b=b,a
>>> print(a,b)
10 5
>>>
点评:语句a,b=b,a的作用是交换对象a、b的值。拨开迷雾见真章:
>>> a,b=5,10
>>> id(a)
1842769088
>>> id(b)
1842769248
>>> a,b=b,a
>>> id(a)
1842769248
>>> id(b)
1842769088
>>> id(10)
1842769248
>>> id(5)
1842769088
>>>
2、将列表中的所有元素组合成字符串
>>> a=['Python','is','awesome']
>>> print(" ".join(a))
Python is awesome
>>>
点评:看到python在词语处理方面的优势了吧?还有很多。
3、查找列表中频率最高的值
方式一:
>>> a=[1,2,3,1,2,3,2,2,3,4,1]
>>> print(max(set(a),key=a.count))
2
方式二:
>>> from collections import Counter
>>> cnt=Count(a)
>>> cnt=Counter(a)
>>> print(cnt.most_common(3))
[(2, 4), (1, 3), (3, 3)]
>>>
点评:python中一些语句的用法把C++中的多态特性发挥到极致,比如max(set(a),key=a.count)。等价过程如下:
>>> a=[1,2,3,1,2,3,2,2,3,4,1]
>>> aset=set(a)
>>> temp=[]
>>> for i in aset:
temp.append((a.count(i),i))
>>> temp.sort(key=lambda x:x[0],reverse=True)
>>> temp
[(4, 2), (3, 1), (3, 3), (1, 4)]
>>> print(temp[0][1])
2
>>>
cnt.most_common(3)语句可以得出频率最大的前三个值,但是是以元组构成的列表表示出来。cnt和temp类似,只不过cnt各元组中第一项是值,第二项是频率,和temp中各元组的第一、二项含义相反。
4、检查两个字符串是不是由相同字母不同顺序组成
>>> from collections import Counter
>>> str1='abcde'
>>> str2='dbeac'
>>> Counter(str1)
Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1})
>>> Counter(str2)
Counter({'d': 1, 'b': 1, 'e': 1, 'a': 1, 'c&