转自http://yangsq.iteye.com/category/20857

python的元组、列表、字典数据类型是很python(there python is a adjective)的数据结构。这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益处。

元组

        个人认为就像java的数组,python中的元组有以下特性:

  • 任意对象的有序集合,这条没啥说的,数组的同性;
  • 通过偏移读取;
  • 一旦生成,不可改变;
  • 固定长度,支持嵌套

来例子吧:

python 代码
 >>> (0, 'haha', (4j, 'y'))
(0, 'haha', (4j, 'y'))
>>> t = (1, 3, 'b')
>>> t[2]
'b'
>>> t[3] Traceback (most recent call last):
File "#41>", line 1, in <module></module>
t[3]
IndexError: tuple index out of range
>>> t[-1]
'b'
>>> t[0:-1]
(1, 3)
>>> t * 2
(1, 3, 'b', 1, 3, 'b')
>>> for x in t:
print x, 1 3 b
>>> 'b' in t
True
>>> q = t + ((3, 'abc'))
>>> q
(1, 3, 'b', 3, 'abc')
>>> for x in (2, (3, 'a')):
print x 2
(3, 'a')
>>> len(q)
5
>>> len((2, (3, 'abc')))
2
>>> (1, 2, 3)[1]
2
>>> q[1] = 'd' Traceback (most recent call last):
File "#57>", line 1, in <module></module>
q[1] = 'd'
TypeError: 'tuple' object does not support item assignment
>>> a = ('b', 'c', q)
>>> 1 in a
False
>>> q in a
True
>>> a
('b', 'c', (1, 3, 'b', 3, 'abc'))
>>> q='d'
>>> a
('b', 'c', (1, 3, 'b', 3, 'abc'))

上面的例子足以说明大部分了,使用元组时最重要的一点是“一旦生成,就不可变了”。

列表

列表就像java里的collection,所具有的特性也要比元组更多,更灵活,其character总结如下:

  • 任意对象的有序集合;
  • 可通过偏移存取,注意,列表中的元素都是可变的,这是不同于元组的;
  • 长度可变,支持嵌套;
  • 还有一些类似java的对象引用机制

由于列表的这些特性,使得列表在实际应用中被广泛使用,下面是一些例子。

1) 首先是基本用法

python 代码
 >>> l = ['a', 'b', 'c']
>>> len(l)
3
>>> l + ['d']
['a', 'b', 'c', 'd']
>>> l * 2
['a', 'b', 'c', 'a', 'b', 'c']
>>> for x in l:
print x, a b c

2) 索引和分片,赋值(单个元素赋值,分片赋值)

python 代码
>>> l = ['abc', 'def', 'ghi', 123]
>>> l[2]
'ghi'
>>> l[-3]
'def'
>>> l[:3]
['abc', 'def', 'ghi']
>>> l[1] = 'haha'
>>> l
['abc', 'haha', 'ghi', 123]
>>> l[1:] = ['apple', 'banana']
>>> l
['abc', 'apple', 'banana']
>>> l[2] = [123, 345, 456]
>>> l
['abc', 'apple', [123, 345, 456]]
>>> l[1:] = [123, 234, 345, 456, 567]
>>> l
['abc', 123, 234, 345, 456, 567]

3) 添加、排序、删除操作

python 代码
 >>> l = ['abc', 'def', 'ghi', 123]
>>> l.append(456)
>>> l
['abc', 'def', 'ghi', 123, 456]
>>> l.sort()
>>> l
[123, 456, 'abc', 'def', 'ghi']
>>> del l[0]
>>> l
[456, 'abc', 'def', 'ghi']
>>> del l[2:]
>>> l
[456, 'abc']

4)一些有趣的用法(来自论坛 id—咖啡舞者)

去掉列表中每个元素头尾的空格:

python 代码
 >>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [str.strip() for str in freshfruit]
['banana', 'loganberry', 'passion fruit'] """把列表中,大于3的元素,乘以2:"""
>>> vec = [2, 4, 6]
>>> [2*x for x in vec if x > 3]
[8, 12] """把列表1的每一个元素和列表2的每一个元素相乘:""" >>> lst1 = [2, 4, 6]
>>> lst2 = [4, 3, -9]
>>> [x*y for x in lst1 for y in lst2]
[8, 6, -18, 16, 12, -36, 24, 18, -54] """取获[0-10)的平方:"""
[x**2 for x in range(10)]

字典

python里的字典就像java里的HashMap,以键值对的方式存在并操作,其特点如下

  • 通过键来存取,而非偏移量;
  • 键值对是无序的;
  • 键和值可以是任意对象;
  • 长度可变,任意嵌套;
  • 在字典里,不能再有序列操作,虽然字典在某些方面与列表类似,但不要把列表套在字典上

1) 基本操作

 >>> table = {'abc':1, 'def':2, 'ghi':3}
>>> table['abc']
1
>>> len(table)
3
>>> table.keys()
['abc', 'ghi', 'def']
>>> table.values()
[1, 3, 2]
>>> table.has_key('def')
True
>>> table.items()
[('abc', 1), ('ghi', 3), ('def', 2)] """修改,删除,添加"""
>>> table = {'abc':1, 'def':2, 'ghi':3}
>>> table['ghi'] = ('g', 'h', 'i')
>>> table
{'abc': 1, 'ghi': ('g', 'h', 'i'), 'def': 2}
>>> del table['abc']
>>> table
{'ghi': ('g', 'h', 'i'), 'def': 2}
>>> table['xyz'] = ['x', 'y', 'z']
>>> table
{'xyz': ['x', 'y', 'z'], 'ghi': ('g', 'h', 'i'), 'def': 2} """在这里需要来一句,对于字典的扩充,只需定义一个新的键值对即可,而对于列表,就只能用append方法或分片赋值。 3)对字典的遍历"""
>>> table = {'abc':1, 'def':2, 'ghi':3}
>>> for key in table.keys():
print key, '\t', table[key] abc 1
ghi 3
def 2

文件

与java的File类相比,python的文件类要狭义一些

1) 文件写

python的一个open语句就打开了一个文件(当给定的文件不存在时,会自动建立一个新的文件)。open的第一个参数是文件名,第二个参数是操作模式,所谓操作模式就是你打开一个文件是用来干什么的,是读,还是写(当然操作模式不仅只有读和写)。还有一件事,操作完要记得关。

 >>> myfile = open('myfile', 'w')
>>> myfile.write('hello world\n')
>>> myfile.close()

2) 文件读

 >>> myfile = open('myfile', 'r')
>>> myfile.readlinereadline()
'hello world\n'

这样两句就顶java一长串的流嵌套,当然,java那样做也是有道理的。

ok,学了不少,说实话,python的core真的没多少,也很简单,难的是何时和如何用python。

Python 元祖、列表、字典、文件(转载)的更多相关文章

  1. 关于Python元祖,列表,字典,集合的比较

      定义 方法 列表 可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用[]来定义的 eg:aList=[123,'abc',4.56,['inner','list'], ...

  2. Python字符串/元祖/列表/字典互转

    #-*- coding:UTF-8 -*- #author:RXS002 #1.字典 dict = {'name':'Zara','age':7,'class':'First'} #字典转换为字符串, ...

  3. python之字符串 元祖 列表 字典

    一 字符串操作 语法:' ' 类型:str #首字母大写其余全部小写 test1 = 'yanShichenG' v = test1.capitalize() #全部小写(可以处理特殊字符) v1 = ...

  4. python列表、元祖、字典

    python列表   ['a','1','vs2']       里面的值可以改 python元祖   ('a','1','css','sdf12')   里面的值不能改 python字典   {'s ...

  5. Python eval() 的使用:将字符串转换为列表,元祖,字典

    eval() 函数用来执行一个字符串表达式,并返回表达式的值. 语法 以下是 eval() 方法的语法: eval(expression[, globals[, locals]]) 参数 expres ...

  6. Python之旅第四天(列表、元祖、字典和习题)

    第四天,感觉时间还是过得很快,今天内容确实有点多,关于list的方法实在是太多了,元组tuple感觉有点鸡肋,可能得到后面才知道他的作用吧,然后是字典,看了很多关于字典的介绍,但是这货到底是干啥用的一 ...

  7. 干货!Python中字符串、列表、元祖、字典,集合之间的转换

    一.字符串的转化 1.字符串转换成列表 字符串转换成list 的时候,str可以作为迭代对象,直接放入:也可以使用split对字符串进行切割.然后返回list s = '1a1b1c' print(l ...

  8. py基础2--列表,元祖,字典,集合,文件

    本节内容 列表.元祖操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 三元运算&生成式&成员运算&解压法&队列堆栈&数据类型转换 1. 列表操作 ...

  9. Python--数据类型与变量(列表、元祖、字典)

    今天我们来看Python中3种內建的数据结构:列表.元祖和字典 列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素特性:1.可存放多个值2.可修改指定索引位置对应的值,可变 ...

  10. python元祖和列表

    下面讲到的分别有: 列表:元祖 列表的定义 list(列表)是python中使用最频繁的数据类型,在其他语言中叫做数组 专门储存一串信息 列表[  ]定义,数据之间有逗号分隔 列表的索引是从0开始的 ...

随机推荐

  1. 2-sat 问题 【例题 Flags(2-sat+线段树优化建图)】

    序: 模拟赛考了一道 2-sat 问题.之前从来没听过…… 考完才发现其实这个东东只要一个小小的 tarjan 求强连通分量就搞定了. 这个方法真是巧妙啊,拿来讲讲. What is it? [・_・ ...

  2. *NOI热身赛C. 小x的城池

    码农题gun.

  3. cpu 性能

    我们平时使用的CPU利用率方法是极具误导性的,并且一年更甚一年.那么什么是CPU利用率?是你的CPU到底有多忙,是像“% CPU”这样到处在用的指标所显示的那样吗? 在top命令里,你看到90%的CP ...

  4. 驱动12.移植dm9000驱动程序

    1 确定相异性 1.1 选中网卡芯片nGCS4 1.2 确定相异性:基地址,中断号,设置时序(内存控制器BWSCON,BANKCONn) 1.3 修改相应的部分 2 测试DM9000C驱动程序:2.1 ...

  5. hdu 1181(Floyed)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...

  6. (1)Unity3d界面、入门

    项目视图 层级视图 属性视图 场景视图 游戏视图 调整u3d整体界面布局 1.查看和移动视图 快捷键Q 2.沿轴方向位移 快捷键W 3.沿轴向旋转 快捷键E 4.沿轴向缩放 快捷键R 5.自由调节小大 ...

  7. Codeforces 875C National Property(拓扑排序)

    题目链接  National Property 给定n个单词,字符集为m 现在我们可以把其中某些字母变成大写的.大写字母字典序大于小写字母. 问是否存在一种方案使得给定的n个单词字典序不下降. 首先判 ...

  8. 用线段树写Dijkstar

    如题 noip前就想用线段树优化Dijkstar 写那啥,感觉挺好玩的 写了个线段树优化的Dijkstar #include<cstdio> #include<cstring> ...

  9. java常用组件

    一.Jpanel 1.面板:容器类组件 2.用途:与Layout配合使用,JFrame—>JPanel—>Layout 二.JTextField 1.文本框 2.JPasswordFiel ...

  10. 高性能内存池NedAlloc

    http://www.nedprod.com/programs/portable/nedmalloc/ http://blog.sina.com.cn/s/blog_6f5b220601012x4t. ...