python中三种基本结构_Python3基本数据结构

一、列表

Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。

clipboard.png

常用方法:

list.append(x) #把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]。

list.extend(L) #通过添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L。

list.insert(i, x) #在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。

list.remove(x) #删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。

list.pop([i]) #从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除。(方法中 i 两边的方括号表示这个参数是可选的,而不是要求你输入一对方括号,你会经常在 Python 库参考手册中遇到这样的标记。)

list.clear() #移除列表中的所有项,等于del a[:]。

list.index(x) #返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误。

list.count(x) #返回 x 在列表中出现的次数。

list.sort( key=None, reverse=False) #对列表中的元素进行排序。

list.reverse() #倒排列表中的元素。

list.copy() #返回列表的浅复制,等于a[:]。

del a[:] #通过一个列表中依索引而不是值来删除一个元素

len(list) #列表元素个数

max(list) #返回列表元素最大值

min(list) #返回列表元素最小值

list(seq) #将元组转换为列表

当做堆栈使用

append() #把一个元素添加到堆栈顶

pop() #把一个元素从堆栈顶释放出来

当作队列使用

只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。

append() #把一个元素添加到队首

popleft() #从队尾释放一个元素

列表推导式

每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

#使用方法

>>> [[x, x**2] for x in vec]

[[2, 4], [4, 16], [6, 36]]

#这里我们对序列里每一个元素逐个调用某方法:

>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']

>>> [weapon.strip() for weapon in freshfruit]

['banana', 'loganberry', 'passion fruit']

#我们可以用 if 子句作为过滤器:

>>> [3*x for x in vec if x > 3]

[12, 18]

>>> [3*x for x in vec if x < 2]

[]

#以下是一些关于循环和其它技巧的演示:

>>> vec1 = [2, 4, 6]

>>> vec2 = [4, 3, -9]

>>> [x*y for x in vec1 for y in vec2]

[8, 6, -18, 16, 12, -36, 24, 18, -54]

>>> [x+y for x in vec1 for y in vec2]

[6, 5, -7, 8, 7, -5, 10, 9, -3]

>>> [vec1[i]*vec2[i] for i in range(len(vec1))]

[8, 12, -54]

#列表推导式可以使用复杂表达式或嵌套函数:

>>> [str(round(355/113, i)) for i in range(1, 6)]

['3.1', '3.14', '3.142', '3.1416', '3.14159']

二、字典

常用方法

str(dict) #输出字典,以可以打印的字符串表示。

radiansdict.clear() #删除字典内所有元素

radiansdict.copy() #返回一个字典的浅复制

radiansdict.fromkeys() #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

radiansdict.get(key, default=None) #返回指定键的值,如果值不在字典中返回default值

key in dict #如果键在字典dict里返回true,否则返回false

radiansdict.items() #以列表返回可遍历的(键, 值) 元组数组

radiansdict.keys() #返回一个迭代器,可以使用 list() 来转换为列表

radiansdict.setdefault(key, default=None) #和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

radiansdict.update(dict2) #把字典dict2的键/值对更新到dict里

radiansdict.values() #返回一个迭代器,可以使用 list() 来转换为列表

pop(key[,default]) #删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

popitem() #随机返回并删除字典中的一对键和值(一般删除末尾对)。str(dict):输出字典,以可以打印的字符串表示。

radiansdict.clear() #删除字典内所有元素

radiansdict.copy() #返回一个字典的浅复制

radiansdict.fromkeys() #创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值

radiansdict.get(key, default=None) #返回指定键的值,如果值不在字典中返回default值

key in dict #如果键在字典dict里返回true,否则返回false

radiansdict.items() #以列表返回可遍历的(键, 值) 元组数组

radiansdict.keys() #返回一个迭代器,可以使用 list() 来转换为列表

radiansdict.setdefault(key, default=None) #和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

radiansdict.update(dict2) #把字典dict2的键/值对更新到dict里

radiansdict.values() #返回一个迭代器,可以使用 list() 来转换为列表

radiansdict.pop(key[,default]) #删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

radiansdict.popitem() #随机返回并删除字典中的一对键和值(一般删除末尾对)。

字典推导

>>> {x: x**2 for x in (2, 4, 6)}

{2: 4, 4: 16, 6: 36}

转为字典

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])

{'sape': 4139, 'jack': 4098, 'guido': 4127}

>>> dict(sape=4139, guido=4127, jack=4098)

{'sape': 4139, 'jack': 4098, 'guido': 4127}

三、集合

1.常用方法

add() #为集合添加元素

clear() #移除集合中的所有元素

copy() #拷贝一个集合

difference() #返回多个集合的差集

difference_update() #移除集合中的元素,该元素在指定的集合也存在。

discard() #删除集合中指定的元素

intersection() #返回集合的交集

intersection_update() #删除集合中的元素,该元素在指定的集合中不存在。

isdisjoint() #判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。

issubset() #判断指定集合是否为该方法参数集合的子集。

issuperset() #判断该方法的参数集合是否为指定集合的子集

pop() #随机移除元素

remove() #移除指定元素

symmetric_difference() #返回两个集合中不重复的元素集合。

symmetric_difference_update() #移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

union() #返回两个集合的并集

update() #给集合添加元素

推导式

>>> (x for x in range(10))

[[2, 4], [4, 16], [6, 36]]

四、遍历技巧

在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):

... print(i, v)

...

0 tic

1 tac

2 toe

同时遍历两个或更多的序列,可以使用 zip() 组合:

>>> questions = ['name', 'quest', 'favorite color']

>>> answers = ['lancelot', 'the holy grail', 'blue']

>>> for q, a in zip(questions, answers):

... print('What is your {0}? It is {1}.'.format(q, a))

...

What is your name? It is lancelot.

What is your quest? It is the holy grail.

What is your favorite color? It is blue.

要反向遍历一个序列,首先指定这个序列,然后调用 reversed() 函数:

>>> for i in reversed(range(1, 10, 2)):

... print(i)

要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值:

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']

>>> for f in sorted(set(basket)):

... print(f)

...

apple

banana

orange

pear

在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}

>>> for k, v in knights.items():

... print(k, v)

...

gallahad the pure

robin the brave

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值