Python中的所有的数据结构都是对象,熟悉常见的操作方法非常重要,以下罗列了Python中基本数据结构的相关操作方法:
二元运算符和操作符
基本的+、-、*、/就不罗列了,列一些特殊的。
运算 | 说明 |
---|---|
a//b | a整除b,例:3//2 ==1 |
a**b | a的b次幂,例:2**3==8 |
a&b | 逻辑判断,若值为整数就是转成二进制后的AND运算 |
a|b | 逻辑判断,若值为整数就是转成二进制后的OR运算 |
a^b | 逻辑判断,若值为整数就是转成二进制后的E-OR运算 |
a is b | a和b是否引用的为同一个对象,是True,反之False |
a is not b | a和b是否引用的为同一个对象,是False,反之True |
字符串
字符串的本质就是一个字符数组,可以通过字符数组方法访问,这里要掌握也写切片原则(可自行查找)。
- list()
>>> a = 'Hello World'
>>> b = list(a)
>>> b
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
- encode()与decode
>>> val
'espanok'
>>> val_utf8=val.encode('utf-8')
>>> val_utf8
b'espanok'
日期和时间
日期和时间在进行时间序列建模的时候还是比较重要的,Python内建的datetime
提供了datatime
、data
、time
三个模块
>>> from datetime import datetime,time,date
>>> dt = datetime(2020,6,30,16,44,11)
>>> dt.day
30
>>> dt.minute
44
>>> dt.year
2020
>>> dt.date()
datetime.date(2020, 6, 30)
>>> dt.time()
datetime.time(16, 44, 11)
>>> dt.strftime('%m/%d/%Y %H:%M')
'06/30/2020 16:44'
日期格式化等具体数据结构:
Python datetime解释博客
控制流语句中
pass
占位符,防止编译报错
#不加pass就得报错
x = 1
if x<1:
pass
elif x ==1 :
print("Your Are Right")
else:
pass
range
迭代器
>>>list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(0,20,2))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> list(range(10,3,-1))
[10, 9, 8, 7, 6, 5, 4]
zip
迭代器
>>>seq1 = ['foo','bar','bez']
>>>seq2 = ['app','lem','qux']
>>>zipped = list(zip(seq1,seq2))
>>>print(zipped)
[('foo', 'app'), ('bar', 'lem'), ('bez', 'qux')]
元组
count
计算某元素在元组中出现的次数
>>> c=2,3,4,4,4,42
>>> c.count(4)
3
列表
list
转化对象类型为列表,如前面的range
和zip
append
尾插法进行列表的扩充。
>>>c=2,3,4,5,6
>>>z = list(c)
>>>z.append(9)
>>>print(z)
[2, 3, 4, 5, 6, 9]
insert
完成任意位置插入,与append相比,insert耗费的计算量大,因为对后续元素的引用必须在内部迁移,以便为新元素提供空间。如果要在序列的头部和尾部插⼊元素,可能需要使用collections.deque,⼀个双尾部队列。
>>>c=2,3,4,5,6
>>>z = list(c)
>>>z.insert(2,100)
>>>print(z) #前插,或者说提供插入后的位置
[2, 3, 100, 4, 5, 6]
pop
是insert
返回一个从列表中弹出的值
>>>c=2,3,4,5,6
>>>z = list(c)
>>>print(z)
>>>d = z.pop(2)
>>>print(d)
>>>print(z)
[2, 3, 4, 5, 6]
4
[2, 3, 5, 6]
remove
是append
的逆操作
>>>c=2,3,4,5,6
>>>z = list(c)
>>>print(z)
>>>z.remove(4)
>>>print(z)
[2, 3, 4, 5, 6]
[2, 3, 5, 6]
- 此外还可以用
in
这种关键字来检查列表中是否存在这个元素。 extend
用来添加多个元素,使用extend方法要比串联的方法来进行列表的拼接要快
>>>x=[4, None, 'foo']
>>>x.extend([7, 8, (2, 3)])
>>>x
[4, None, 'foo', 7, 8, (2, 3)]
sort
和sorted
这个函数的方法有很多,可以选择一定的关键字进行排序,也可以不加任何函数就可以实现数字整数的排序。具体可查看W3School的解释enumerate
用形成一个enumerate类,这个类会匹配一个数字和一个值,数字默认从0开始计算,我们可以用它来形成字典类很方便。
collection = ["foo","bar","baz","qux","nnc"]
c = list(enumerate(collection))
for i,value in enumerate(collection):
print(i,value)
print(c)
#结果
0 foo
1 bar
2 baz
3 qux
4 nnc
[(0, 'foo'), (1, 'bar'), (2, 'baz'), (3, 'qux'), (4, 'nnc')]
生成字典的思路
mapping = {}
collection = ["foo","bar","baz","qux","nnc"]
for i,val in enumerate(collection):
mapping[val] = i
print(mapping)
#结果
{'foo': 0, 'bar': 1, 'baz': 2, 'qux': 3, 'nnc': 4}
map
方法,在Python3.x之后生成的就是一个迭代器,他的解释如下:
mapping = []
map(function, iterable, ...)
for value in map(lambda x,y:x+y,[1,2,3,4,5],[6,7,8,9,10]):
mapping.append(value)
print(mapping)
#结果
[7, 9, 11, 13, 15]
reversed
顾名思义列表逆置,这个就不写例子啦比较简单。
字典
del
关键字和pop
方法用来删除字典中的元素
mapping = {}
collection = ["foo","bar","baz","qux","nnc"]
for i,val in enumerate(collection):
mapping[val] = i
del mapping["foo"]
result = mapping.pop("baz")
print(mapping)
print(result)
#结果
{'bar': 1, 'qux': 3, 'nnc': 4}
2
keys
和values
是字典的两个迭代器方法,可以用字典的这两个属性来进行迭代。
mapping = {}
collection = ["foo","bar","baz","qux","nnc"]
for i,val in enumerate(collection):
mapping[val] = i
print(list(mapping.keys()))
print(list(mapping.values()))
#结果
['foo', 'bar', 'baz', 'qux', 'nnc']
[0, 1, 2, 3, 4]
update
方法搞定字典数据合并。
mapping = {}
diction = {}
collection = ["foo","bar","baz","qux","nnc"]
for i,val in enumerate(collection):
mapping[val] = i
for i,val in zip(collection,range(len(collection))):
diction[val] = i
mapping.update(diction)#diction和mapping不能完全一样不然失效
print(mapping)
#结果
{'foo': 0, 'bar': 1, 'baz': 2, 'qux': 3, 'nnc': 4, 0: 'foo', 1: 'bar', 2: 'baz', 3: 'qux', 4: 'nnc'}
get
方法,与下面的方法等效:
if key in some_dict:
value = some_dict[key]
else:
value = default_value
#等效于
value = some_dict.get(key,default_value)
hash
众所周知字典数据类型的底层算法原理是C语言编写的哈希表,他在添加和查找时首先要进行hash
函数,将key转化成整数值,那么这个key必须能转换成整数值,这就要求键通常为不可变的标量类型,一般就是整型、浮点、字符串、元组,可以用hash
函数来检索一个对象是否可以被哈希,或者说“可哈希性”。
集合
set就比较简单了,和前面的方法基本类似,但是值得注意的是他的一些代替算法,一些交并补运算的简便写法,这里就不再过多介绍可查看菜鸟教程上的集合介绍
- 列表、集合、字典的过滤式或者说推导式是比较有趣的python特性
# list_value = [express for val in collection if condition]
# dict_value = {keyexpr:val_expr for val in collection if condition}
# set_value = {express for val in collection if condition}