Python的容器数据类型

Sequence序列对象

lists列表, 元组tuples, and range

通用序列操作:

  • item in或not in sequence:判断item在或者不在序列中
  • +或符号:将两个序列相加或把一个序列内容复制n倍, 注意可能得到的是同一对象的多个引用
  • s[n]:第n个元素,超出范围IndexError
  • s[i:j]:第i到j个元素的切片,包含第i个不包含第j个,i为负数相当于0,j超范围相当于最多
  • s[i:j:k]:第i到j个元素间隔k个取出
  • len(s):序列的元素总数
  • min(s)和max(s):按照排序的最小或最大一项
  • s.index(x,i,j):ij可选。序列中x的位置,i和j限定搜索范围,返回x的位置或ValueError
  • s.count(x):s中包含x的重复数量,找不到返回0
  • for x in s:循环处理序列中的每一项
  • s[i:j] = t:将序列的i到j项替换为t,如果t为序列则直接元素对应替换,无论t数量多少;如果t为非序列,则i到j变为一个t对象
  • s[i:j]=[]:相当于删除i到j项(不含j),等同del s[i:j]
  • s.append(x):将x添加到s,等同s[len(s):len(s)]=[x]
  • s.clear():清理所有元素
  • s.copy():复制整个序列,相当于s[:]
  • s.extend(t) or s += t:合并两个序列,相当于s[len(s):len(s)] = t
  • s.insert(i, x):将x插入到i位置,相当于s[i:i] = [x]
  • s.pop(i):获取第i项并从序列中删除它,如果i省略则指向最后一个
  • s.remove(x):移除x项,如果不存在则ValueError
  • s.reverse():翻转顺序

list列表

  • 构造方法:[],[1,2,3],[for i in range(10)],list('abc'),list((1,2,3))
>>> sorted((3,2,1))
[1, 2, 3]
>>> list((1,2,3))
[1, 2, 3]
  • 负数索引从 list 的尾部开始向前计数来存取元素。任何一个非空的 list 最后一个元素总是 li[-1]
  • sorted(list, key=None, reverse=False)为列表排序,生成新排序列表
>>> li=[{'a':22},{'a':12},{'a':100}]
>>> sorted(li,key=lambda x:x['a'])
[{'a': 12}, {'a': 22}, {'a': 100}]
  • list.sort()将list排序,list必须为基本对象,不能是容器对象;而sorted则可以利用key对更复杂对象排序。

Tuples元组

  • 构造方法:(a,b),(a,),(a,b,c),tuple([1,2,3])
  • 元组一旦创建将不可修改
  • Tuple没有没有append或extend方法,没有 remove 或 pop 方法、没有 index 方法。
  • 可以使用 in 来查看一个元素是否存在于 tuple 中。

range

  • 构造方法:range(start,stop,step),range(10),range(5,50,5);step不能为0
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(0))
[]
>>> list(range(1, 0))
[]
  • range无论数字多少,总是占用同样小的内存。
  • range可以比较
>>> range(0, 3, 2) == range(0, 4, 2)
True

range存在.start,.stop,.step属性

集合类型set

  • 集合支持x in set, len(set), and for x in set等语法
  • 集合中没有重复元素
  • isdisjoint是否完全无交集
>>> a={1,2,3,4}
>>> b={3,4,5,6}
>>> a.isdisjoint(b)
False
>>> c={5,6}
>>> a.isdisjoint(c)
True
  • issubset(other)是否子集;相当于set <= other
  • issuperset(other)是否超集;相当于set >= other
  • union(other)与other合并;
  • intersection(*others)交集
  • difference(*others)在此集合但不在other集合
  • symmetric_difference(others)不在交集但在此集合或other集合
  • copy()复制集合
  • update(*others)将others添加进来
  • intersection_update(*others)取交集
  • add(elem),remove(elem)添加和移除元素,如果不存在则抛出异常KeyError
  • discard(elem)删除元素,如果不存在不报错
  • pop()任意去掉一个元素
  • clear()清空

字典dict

  • Dictionary 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系。
  • 每一个元素都是一个 key-value 对, 整个元素集合用大括号括起来
  • 您可以通过 key 来引用其值, 但是不能通过值获取 key
  • 在一个 dictionary 中不能有重复的 key。给一个存在的 key 赋值会覆盖原有的值
  • dictionary 的 key 是大小写敏感的
  • Dictionary 的值可以是任意数据类型, 包括字符串, 整数, 对象, 甚至其它的 dictionary。
  • 在单个 dictionary 里, dictionary 的值并不需要全都是同一数据类型, 可以根据需要混用和匹配。
  • 构建方法:{'a':11,'b':22},{11:'22',22:'bb'},键只能是索引数字(正负数和小数都可)或字符串
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True
  • len(d)字典属性数量
  • del d[key]删除key,如果不存在则KeyError
  • clear(),copy()
  • fromkeys(seq[, value])用seq序列做键值key,所有键都等于value
  • get(key)获取值,但不出错
  • items(),keys(),values()返回一个可枚举的对象
>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> values = dishes.values()

>>> # iteration
>>> n = 0
>>> for val in values:
...     n += val
>>> print(n)
504

>>> # keys and values are iterated over in the same order (insertion order)
>>> list(keys)
['eggs', 'sausage', 'bacon', 'spam']
>>> list(values)
[2, 1, 1, 500]

>>> # view objects are dynamic and reflect dict changes
>>> del dishes['eggs']
>>> del dishes['sausage']
>>> list(keys)
['bacon', 'spam']

>>> # set operations
>>> keys & {'eggs', 'bacon', 'salad'}
{'bacon'}
>>> keys ^ {'sausage', 'juice'}
{'juice', 'sausage', 'bacon', 'spam'}
  • pop(key)删除一个属性,不存在的话报错;popitem()删除最后一个属性
  • setdefault(key[, default])设置默认值,不存在的话自动添加
  • update(other)更新属性值,不存在的话自动添加
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 上帝给我一个任务, 叫我牵一只蜗牛去散步。 我不能走太快,蜗牛已经尽力爬, 为何每次总是那么一点点? 我催它,我唬...
    李泳仪阅读 755评论 0 1
  • 11月28日星期三 天气晴 好累啊!只有等孩子睡了我才能安心的躺在床上休息了。 上午还是像昨天一样,先去和小宝...
    a夏天的童话a阅读 123评论 0 1
  • 当遇到用户模型时,主要用户不是个精密的词语,区分用户
    Binner阅读 446评论 0 51