关闭

Python核心数据类型——列表与字典

标签: Python列表字典
1201人阅读 评论(0) 收藏 举报
分类:
列表和字典这两种类型几乎是Python所有脚本的主要工作组件。

======================================================================================

列表

列表是:
任意对象的有序集合
通过偏移读取
可变长度、异构以及任意嵌套
属于可变序列的分类
对象引用数组

======================================================================================

基本的列表操作,前面已经有学过,这里只记录没学过或比较重要的

1.内置函数map,它对序列中的各项应用一个函数并把结果收集到一个新的列表中:

>>> list(map(abs,[-1,-2,-3,1,2,3]))
[1, 2, 3, 1, 2, 3]
2.分片赋值:
>>> L = [1,2,3]
>>> L[:2]=[9,8]
>>> L
[9, 8, 3]


>>> L
[9, 8, 3]
>>> L[1:2]=['a','b','c']
>>> L
[9, 'a', 'b', 'c', 3]
分片赋值可以分成两步来理解:
(1)删除。删除等号左边指定的分片
(2)插入。将包含在等号右边对象中的片段插入旧分片被删除的位置。

--所以,插入元素的数目不需要与删除的数目相匹配。
--所以,分片赋值能够用来替换(覆盖)、增长(插入)、缩短(删除)主列表,这是功能强大的操作。

3.列表排序 sort,我们可以通过传入关键字参数来修改排序行为--这是指定按名称传递的函数调用中特殊的“name=value”语法。
在排序中,key参数给出了一个单个参数的函数,它返回在排序中使用的值,reverse参数允许排序按照降序而不是升序进行。

>>> L = ['abc','ABD','aBc']
>>> L.sort()
>>> L
['ABD', 'aBc', 'abc']
>>> L = ['abc','ABD','aBc']
>>> L.sort(key=str.lower)
>>> L
['abc', 'aBc', 'ABD']
>>> L = ['abc','ABD','aBc']
>>> L.sort(key=str.lower,reverse=True)
>>> L
['ABD', 'abc', 'aBc']
排序在最近的Python中可以作为内置函数使用了,它可以排序任何集合(不只是列表),并且针对结果返回一个新的列表(而不是原处修改)
>>> L = ['abc','ABD','aBe']
>>> sorted(L,key=str.lower,reverse=True)
['aBe', 'ABD', 'abc']

>>> L = ['abc','ABD','aBe']
>>> sorted([x.lower() for x in L],reverse=True)
['abe', 'abd', 'abc']
注意上述两个例子的区别。

4.extend和pop方法分别能够在末端插入多个元素、删除一个元素。也有一个reversed内置函数,像sorted一样地工作,但是,它必须包装在一个list调用中,因为它是一个迭代器。

>>> L =[1,2]
>>> L.extend([3,4,5])
>>> L
[1, 2, 3, 4, 5]
>>> L.pop()
5
>>> L
[1, 2, 3, 4]
>>> L.reverse()
>>> L
[4, 3, 2, 1]
>>> list(reversed(L))
[1, 2, 3, 4]
在某些类型的应用程序中,往往会把这里用到的列表pop方法和append方法联用,来实现快速的后进先出的(LIFO)堆栈结构。列表的末端作为堆栈的顶端
>>> L
[4, 3, 2, 1]
>>> L.append(5)
>>> L
[4, 3, 2, 1, 5]
>>> L.pop()
5
>>> L
[4, 3, 2, 1]
pop方法也能够接受某一个即将删除并返回的元素的偏移(默认值为最后一个元素),这一偏移是可选的。其他列表方法可以通过值删除(remove)某元素,在偏移处插入(insert)某元素,查找某元素的偏移(index)等

>>> L = ['spam','eggs','ham']
>>> L.index('eggs')
1
>>> L.insert(1,'toast')
>>> L
['spam', 'toast', 'eggs', 'ham']
>>> L.remove('eggs')
>>> L
['spam', 'toast', 'ham']
>>> L.pop(1)
'toast'
>>> L
['spam', 'ham']
5.其他常见的列表操作
由于列表是可变的,你可以用del语句在原处删除某项或某片段:

>>> L
['SPAM!', 'eat', 'more', 'please']
>>> del L[0]
>>> L
['eat', 'more', 'please']
>>> del L[1:]
>>> L
['eat']
因为分片赋值时删除外加插入操作,可以通过将空列表赋值给分片来删除列表片段。
==========================================================================================

字典

除了列表之外,字典也许是Python之中最灵活的内置数据结构类型。如果把列表看做是有序的对象集合,那么就可以把字典当成是无序的集合。它们主要的差别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

Python字典主要属性如下:
通过键而不是偏移量来读取
任意对象的无序集合
可变长、异构、任意嵌套
属于可变映射类型
对象引用表
【字典是唯一内置的映射类型(键映射到值的对象)】

字典解析:

>>> D = {x:x*2 for x in range(10)}
>>> D
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}
【1】.字典的update方法有点类似于合并,但是,他和从左到右的顺序无关,它把一个字典的键和值合并到另一个字典中,盲目地覆盖相同键的值:
>>> D
{'eggs': 3, 'ham': 1, 'spam': 2}
>>> D2 = {'toast':4,'muffin':5}
>>> D.update(D2)
>>> D
{'eggs': 3, 'muffin': 5, 'ham': 1, 'spam': 2, 'toast': 4}
>>> D2['muffin']=999
>>> D.update(D2)
>>> D
{'muffin': 999, 'eggs': 3, 'ham': 1, 'spam': 2, 'toast': 4}
【2】.字典的pop方法与列表类似,不过删除的是一个键而不是一个可选的位置
>>> D.pop('spam')
2
>>> D
{'muffin': 999, 'eggs': 3, 'ham': 1, 'toast': 4}
【3】.使用字典可模拟灵活的列表,即键值用整数,这样用不到的索引不占用空间,反而提高了效率
【4】.字典用于稀疏数据结构
【5】.使用字典作为“记录”
【6】.创建字典的其他方法:

(1){'name':'mel','age':45}
(2)	 D = {}
	 D['name']='mel'
 	 D['age']=45
(3)dict(name='mel',age=45)
(4)dict([('name','mel'),('age',45)])
这四种形式都会建立相同的两键字典
如果所有键的值都相同,也可以用如下特殊形式对字典进行初始化:

>>> dict.fromkeys(['a','b'],0)
{'a': 0, 'b': 0}
另外,zip函数是在一个单个调用中从键和值的列表来构建一个字典的方式之一。如果不能在代码中预计键和值的集合,总是可以将它们构建为列表然后再对应起来:
>>> list(zip(['a','b','c'],[1,2,3]))
[('a', 1), ('b', 2), ('c', 3)]
>>> dict(zip(['a','b','c'],[1,2,3]))
{'a': 1, 'b': 2, 'c': 3}
在Python3.0中,可以用一个字典解析表达式来实现同样的效果
>>> D = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
>>> D
{'a': 1, 'b': 2, 'c': 3}
字典解析应用如下:
>>> D ={x :x**2 for x in range(1,6)}
>>> D
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
>>> D = {c.lower():c+'!' for c in['SPAM','EGGS','HAM']}
>>> D
{'eggs': 'EGGS!', 'ham': 'HAM!', 'spam': 'SPAM!'}

【7】:排序字典键

D={ ... }
for k in sorted(D.keys()):
...

【8】:has_key方法已死:in永生

>>> D
{'a': 1, 'b': 2, 'c': 3}
>>> D.has_key('a')
Traceback (most recent call last):
  File "<pyshell#77>", line 1, in <module>
    D.has_key('a')
AttributeError: 'dict' object has no attribute 'has_key'
>>> 'a' in D
True
>>> 'a' in D.keys()
True
广为使用的字典has_key键存在测试方法在Python3.0中取消了,相反,使用in成员关系表达式,或者带有默认测试的一个get(其中,in通常是首选的)
>>> D.get('c',0)
3
>>> D.get('d',0)
0
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Python核心编程之字典和集合

1、了解字典 字典是python中唯一的映射类型。映射类型对象里哈希值和指向的对象是一对多的关系。 字典对象是可变的。 字典类型和序列类型容器(列表、元组)的区别是存储和访问数据的方式不同。序列类型只用数字类型的键,从序列的开始起按数值顺序索引;字典类型可以用其他对象类型做键,常见...
  • flyapy
  • flyapy
  • 2014-07-17 01:38
  • 367

Python中的字典,列表,元组笔记

Dictionary: 定义字典: 格式:dict={keys:values,......} 定义字典用的而是{}。keys是字典的唯一索引键,values是字典所代表的值,其中keys可以为字符串和数值(且不可重复),values则可以为任意数据类型。而且字典中的元素是无序组合。 eg:dict...
  • swimming_in_IT_
  • swimming_in_IT_
  • 2016-12-28 19:29
  • 427

python的列表和字典(简单介绍)

python的字典 Python的字典以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问。字典中几乎可以包含任意的变量,字典,数列,元组。数列也一样。 python字典的方法 Python字典添加元素的方法是直接添加键值对 字典的排列顺序是随机的//a为字典 a["...
  • liu1324457514
  • liu1324457514
  • 2017-05-02 18:55
  • 431

实现Python列表字典循环

列表: #打印1-100的数字 for number in range(1,101): print number #打印多维的列表,将元素分别存放 xy=[(1,10),(2,20),(3,30)] x=[] y=[] for i in xy: x.append(i[0]) ...
  • qq_31215163
  • qq_31215163
  • 2016-08-31 17:42
  • 441

python数据类型--字典

python数据类型--字典{}   字典是python中惟一的映射类型(哈希表)   字典对象时可变的,但是字典的键必须使用不可变对象,并且一个字典中可以使用不同类型的键值   keys()或者values()返回键列表或者列表   items(...
  • u014596135
  • u014596135
  • 2016-03-18 21:22
  • 650

Python -- 字典转换为列表

字典转换为列表
  • wudj810818
  • wudj810818
  • 2015-12-18 17:20
  • 7846

python序列的三种类型:列表、元组、字典

转载自红防联盟www.rednat.com python的数据结构主要就是序列,而列表、元组和字典三种类型比较容易混淆,特地做了个笔记记录了一下,供大家学习: 列表:有序可变序列   创建:userlist = [1,2,3,4,5,6]   修改:userlis...
  • Pain_Love
  • Pain_Love
  • 2017-06-04 14:23
  • 384

Python 字典 列表 嵌套 复杂排序大全

一: 字典排序 二: 列表排序 三: 字典列表相互嵌套排序
  • ray_up
  • ray_up
  • 2014-12-22 20:28
  • 9429

python 第十二周 元组、列表、字典、序列

4.2 列表列表与元组相似,也是由一组元素组成,列表可以实现添加、删除和查找操作,元素的值可以被修改。 4.2.1 列表的创建List_name = [元素1,元素2,…] ,列表用“[ ]”包含元素。 添加元素调用:函数append(object),每次添加的新元素将排在列表的尾部。 ...
  • colin3516
  • colin3516
  • 2015-05-18 14:51
  • 681

Python中函数参数(默认、列表、可变长度、字典类型)

#_*_coding:UTF-8_*_ # 1.默认参数 # 函数的参数支持默认。当某个参数没有传递实际值时,函数将使用默认参数计算。例如,可以向login()函数的username参数和password参数分别提供一个默认值。 # 函数定义 def login(username="max...
  • stven_king
  • stven_king
  • 2014-06-20 21:21
  • 3690
    个人资料
    • 访问:428376次
    • 积分:6186
    • 等级:
    • 排名:第4682名
    • 原创:152篇
    • 转载:39篇
    • 译文:10篇
    • 评论:58条
    GitHub
    博客专栏
    JavaWeb框架

    文章:6篇

    阅读:17143
    XML

    文章:7篇

    阅读:34076
    Servlet

    文章:24篇

    阅读:84019
    Python3

    文章:44篇

    阅读:102768
    最新评论