python常用函数

enumerate函数

,Python内建了⼀个enumerate函数,可以返
回(i, value)元组序列:
for i, value in enumerate(collection):
# do something with value

当你索引数据时,使⽤enumerate的⼀个好⽅法是计算序列(唯
⼀的)dict映射到位置的值:
In [83]: some_list = ['foo', 'bar', 'baz']
In [84]: mapping = {}
In [85]: for i, v in enumerate(some_list):
....: mapping[v] = i
In [86]: mapping
Out[86]: {'bar': 1, 'baz': 2, 'foo': 0}
View Code

sorted函数

sorted函数可以从任意序列的元素返回⼀个新的排好序的列表:
In [87]: sorted([7, 1, 2, 6, 0, 3, 2])
Out[87]: [0, 1, 2, 2, 3, 6, 7]
In [88]: sorted('horse race')
Out[88]: [' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r',
View Code

zip函数

1.zip可以将多个列表、元组或其它序列成对组合成⼀个元组列
表:
In [89]: seq1 = ['foo', 'bar', 'baz']
In [90]: seq2 = ['one', 'two', 'three']
In [91]: zipped = zip(seq1, seq2)
In [92]: list(zipped)
Out[92]: [('foo', 'one'), ('bar', 'two'), ('baz', 'three')]

2.zip可以处理任意多的序列,元素的个数取决于最短的序列:
In [93]: seq3 = [False, True]
In [94]: list(zip(seq1, seq2, seq3))
Out[94]: [('foo', 'one', False), ('bar', 'two', True)]

3.zip的常⻅⽤法之⼀是同时迭代多个序列,可能结合enumerate
使⽤:
In [95]: for i, (a, b) in enumerate(zip(seq1, seq2)):
....: print('{0}: {1}, {2}'.format(i, a, b))
....:
0: foo, one
1: bar, two
2: baz, three


4.给出⼀个“被压缩的”序列,zip可以被⽤来解压序列。也可以当
作把⾏的列表转换为列的列表。这个⽅法看起来有点神奇:
In [96]: pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'),
....: ('Schilling', 'Curt')]
In [97]: first_names, last_names = zip(*pitchers)
In [98]: first_names
Out[98]: ('Nolan', 'Roger', 'Schilling')
In [99]: last_names
Out[99]: ('Ryan', 'Clemens', 'Curt')
View Code

reversed函数

reversed可以从后向前迭代⼀个序列:

In [100]: list(reversed(range(10)))
Out[100]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
View Code

字典

1.字典可能是Python最为重要的数据结构。它更为常⻅的名字是哈
希映射或关联数组。它是键值对的⼤⼩可变集合,键和值都是
Python对象。创建字典的⽅法之⼀是使⽤尖括号,⽤冒号分隔键
和值:
创建字典1:⽤序列创建字典
mapping = {}
for key, value in zip(key_list, value_list):
mapping[key] = value
创建字典2:
In [101]: empty_dict = {}
In [102]: d1 = {'a' : 'some value', 'b' : [1, 2, 3, 4]}
In [103]: d1
创建字典3:
In [121]: mapping = dict(zip(range(5), reversed(range(5))))
In [122]: mapping
Out[122]: {0: 4, 1: 3, 2: 2, 3: 1, 4: 0}
2.
你可以像访问列表或元组中的元素⼀样,访问、插⼊或设定字典
中的元素:
In [104]: d1[7] = 'an integer'
In [105]: d1
Out[105]: {'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}
In [106]: d1['b']
Out[106]: [1, 2, 3, 4]

3.可以⽤del关键字或pop⽅法(返回值得同时删除键)删除值:
In [108]: d1[5] = 'some value'
In [109]: d1
Out[109]:
{'a': 'some value',
'b': [1, 2, 3, 4],
7: 'an integer',
5: 'some value'}
In [110]: d1['dummy'] = 'another value'
In [111]: d1
Out[111]:
{'a': 'some value',
'b': [1, 2, 3, 4],
7: 'an integer',
5: 'some value',
'dummy': 'another value'}
In [112]: del d1[5]
In [113]: d1
Out[113]:
{'a': 'some value',
'b': [1, 2, 3, 4],
7: 'an integer',
'dummy': 'another value'}
In [114]: ret = d1.pop('dummy')
In [115]: ret
Out[115]: 'another value'
In [116]: d1
Out[116]: {'a': 'some value', 'b': [1, 2, 3, 4], 7: 'an integer'}

4.keys和values是字典的键和值的迭代器⽅法。虽然键值对没有
顺序,这两个⽅法可以⽤相同的顺序输出键和值:
In [117]: list(d1.keys())
Out[117]: ['a', 'b', 7]
In [118]: list(d1.values())
Out[118]: ['some value', [1, 2, 3, 4], 'an integer']

5.⽤update⽅法可以将⼀个字典与另⼀个融合:update⽅法是原地改变字典,因此任何传递给update的键的旧
的值都会被舍弃。
In [119]: d1.update({'b' : 'foo', 'c' : 12})
In [120]: d1
Out[120]: {'a': 'some value', 'b': 'foo', 7: 'an integer', 'c':12})
View Code

get

1.
if key in some_dict:
value = some_dict[key]
else:
value = default_value

等价于
value = some_dict.get(key, default_value)
View Code

通过⾸字⺟,将⼀个列表中的单词分类:

方法1:
In [123]: words = ['apple', 'bat', 'bar', 'atom', 'book']
In [124]: by_letter = {}
In [125]: for word in words:
.....: letter = word[0]
.....: if letter not in by_letter:
.....: by_letter[letter] = [word]
.....: else:
.....: by_letter[letter].append(word)
.....:
In [126]: by_letter
Out[126]: {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}
方法2:
setdefault⽅法
for word in words:
    letter = word[0]
    by_letter.setdefault(letter, []).append(word)

方法3:分类函数
from collections import defaultdict
by_letter = defaultdict(list)
for word in words:
    by_letter[word[0]].append(word)
View Code

有关集合操作

集合是⽆序的不可重复的元素的集合。你可以把它当做字典,但
是只有键没有值。
1.
可以⽤两种⽅式创建集合:通过set函数或使
⽤尖括号set语句:
In [133]: set([2, 2, 2, 1, 3, 3])
Out[133]: {1, 2, 3}
In [134]: {2, 2, 2, 1, 3, 3}
Out[134]: {1, 2, 3}

2.
集合⽀持合并、交集、差分和对称差等数学集合运算。考虑两个
示例集合:
In [135]: a = {1, 2, 3, 4, 5}
In [136]: b = {3, 4, 5, 6, 7, 8}
合并是取两个集合中不重复的元素。可以⽤union⽅法,或者|
运算符:
In [137]: a.union(b)
Out[137]: {1, 2, 3, 4, 5, 6, 7, 8}
In [138]: a | b
Out[138]: {1, 2, 3, 4, 5, 6, 7, 8}

交集的元素包含在两个集合中。可以⽤intersection或&运算
符:
In [139]: a.intersection(b)
Out[139]: {3, 4, 5}
In [140]: a & b
Out[140]: {3, 4, 5}
View Code

 

1.
所有逻辑集合操作都有另外原地实现⽅法,它可以直接⽤结果替
代集合的内容。对于⼤的集合,这么做效率更⾼:
In [141]: c = a.copy()
In [142]: c |= b
In [143]: c
Out[143]: {1, 2, 3, 4, 5, 6, 7, 8}
In [144]: d = a.copy()
In [145]: d &= b
In [146]: d
Out[146]: {3, 4, 5}
2.
集合的内容相同时,集合才对等:
In [153]: {1, 2, 3} == {3, 2, 1}
Out[153]: True
View Code

列表、集合和字典推导式

1.列表推导式
列表推导式是Python最受喜爱的特性之⼀。它允许⽤户⽅便的从
⼀个集合过滤元素,形成列表,在传递参数的过程中还可以修改
元素。形式如下:
[expr for val in collection if condition]

它等同于下⾯的for循环;
result = []
for val in collection:
    if condition:
        result.append(expr)   
例如:将列表中的字符转换为大写
In [154]: strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
In [155]: [x.upper() for x in strings if len(x) > 2]
Out[155]: ['BAT', 'CAR', 'DOVE', 'PYTHON']

2.字典推导式(对字典的key进行操作)
dict_comp = {key-expr : value-expr for value in collection if condition}
a=dict(zip(range(5),reversed(range(5))))
print(a)
b={key+1 for key in a if key>2}
print(b)

3.集合推导式
set_comp = {expr for value in collection if condition}
View Code

 strip

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
str = "00000003210Runoob01230000000"; 
print str.strip( '0' );  # 去除首尾字符 0
 
 
str2 = "   Runoob      ";   # 去除首尾空格
print str2.strip();
View Code

restrip

Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格).
#!/usr/bin/python

str = "     this is string example....wow!!!     ";
print str.rstrip();
str = "88888888this is string example....wow!!!8888888";
print str.rstrip('8');
输出结果:
     this is string example....wow!!!
88888888this is string example....wow!!!
View Code

sub函数

1.
re是regular expression的所写,表示正则表达式

sub是substitute的所写,表示替换;

re.sub是个正则表达式方面的函数,用来实现通过正则表达式,实现比普通字符串的replace更加强大的替换功能;

举个最简单的例子:

如果输入字符串是:
inputStr = "hello 111 world 111"
replacedStr = inputStr.replace("111", "222")
"hello 222 world 222"
2.
re.sub(pattern, repl, string, count=0, flags=0)
eg.
inputStr = "hello 123 world 456"
replacedStr = re.sub("\d+", "222", inputStr)

count参数:匹配个数
View Code

title()方法语法:

#!/usr/bin/python

str = "this is string example....wow!!!";
print str.title();
View Code

lambda函数

def short_function(x):
return x * 2
equiv_anon = lambda x: x * 2
View Code

⽣成器表达式也可以取代列表推导式,作为函数参数:

In [191]: sum(x ** 2 for x in range(100))#只需要把列表推导式的[]变为()即可
Out[191]: 328350
In [192]: dict((i, i **2) for i in range(5))
Out[192]: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
View Code

itertools模块

In [193]: import itertools
In [194]: first_letter = lambda x: x[0]
In [195]: names = ['Alan', 'Adam', 'Wes', 'Will', 'Albert', 'Steven']
In [196]: for letter, names in itertools.groupby(names, first_letter)
        print(letter, list(names)) # names is a generator
A ['Alan', 'Adam']
W ['Wes', 'Will']
A ['Albert']
S ['Steven']    
View Code

 

 

posted @ 2020-03-18 16:12  爬爬QQ  阅读(517)  评论(0)    收藏  举报