全部博文(921)
分类: Python/Ruby
2011-02-12 01:13:53
列表是序列对象,可包含任意的Python数据信息,如字符串、数字、列表、元组等。列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加、修改、删除等操作。可以通过list(seq)函数把一个序列类型转换成一个列表。列表的几个例子:
list = [ "a", "b", "c" ],这是字符列表。
list = [ 1, 2, 3, 4 ],这是数字列表。
list = [ [1,2,3,4], ["a","b","c"] ],这是列表的列表。列表的嵌套
list = [ (1,2,3,4), ("a","b","c") ],这是元组列表。当然也可以在列表里面嵌套各种元素,比如:
sample = [1, ["another", "list"], ("a", "tuple")]
list((1,2))把一个元组转换成一个列表[1,2],list('test')可把字符串转换成['t','e','s','t']列表。mylist=list(mytuple)就可以把一个tuple转换成list,然后tuple(mylist)可以把一个list转换成一个tuple
访问列表可通过索引来引用(Slicing a list),如:list[0]将引用列表的第一个值。list[0:1]返回第一和第二个元素。这个不对,根据说明,只能返回0-(1-1),也就是说返回第0个元素。比如x=[1,2,3,4],那么x[1:2]就会得到2;x[1:3]就会得到2,3。这个是非常非常重要的地。
用range()和xrange()函数可自动生成列表,具体用法请参考“python参考篇”的内容。
可通过列表综合来创建列表,该功能是在python2.0版本中新增加的。如果想对列表中的每个项进行运算并把结果存储在一个新列表中,或者想创建一个仅包含特定满足某种条件的项,采用该方法是很适合的。如:[x*x for x in range(1,10)]会得到一个X的平方的新列表;我们还可添加if条件控制输出,如:[x*x for x in range(1,10) if x%2==0];还可在列表中使用多个for语句,如:
>>> [x+y for x in "123" for y in "abc"]
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']
x,y值可取列表或元组等,以构成更复杂的结构。
“+”号可连接两个列表。
访问列表的列表(嵌套列表)可用list[1][0],这将访问嵌套中的第二个列表的第一个元素。
可用数字与列表相乘以复制内容,如:list*2会得到一个[1,2,3,4,1,2,3,4]的列表。注意,不能用列表与列表相乘。
由于列表是可变的,我们可用赋值语句进行操作,如:list[0] = 2。
列表对象方法可对列表进行操作,如列表内容的添加,删除,排序等。如list.sort()可对list列表进行排序。
>>>"c" in li 如果存在则返回1,如果不存在就返回0,这样可以查询是否包括某个元素。
>>> li.index("new") 这个命令可以返回那个元素所在index,如果不存在就会报错,所以最好使用上面例子的方法
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]
>>> [[x,x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]
>>> [x, x**2 for x in vec] #error - parens required for tuples
File "", line 1, in ?
[x, x**2 for x in vec]
^
SyntaxError: invalid syntax
>>> [(x, x**2) for x in vec]
[(2, 4), (4, 16), (6, 36)]
>>> 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]
列表对象支持的方法
方法 | 描述 |
---|---|
append(x) | 在列表尾部追加单个对象x。使用多个参数会引起异常。 |
count(x) | 返回对象x在列表中出现的次数。 |
extend(L) | 将列表L中的表项添加到列表中。返回None。 |
Index(x) | 返回列表中匹配对象x的第一个列表项的索引。无匹配元素时产生异常。 |
insert(i,x) | 在索引为i的元素前插入对象x。如list.insert(0,x)在第一项前插入对象。返回None。 |
pop(x) | 删除列表中索引为x的表项,并返回该表项的值。若未指定索引,pop返回列表最后一项。 |
remove(x) | 删除列表中匹配对象x的第一个元素。匹配元素时产生异常。返回None。 |
reverse() | 颠倒列表元素的顺序。 |
sort() | 对列表排序,返回none。bisect模块可用于排序列表项的添加和删除。 |
Tuple元组
Tuple(元组)和List(列表)很相似,但元组是不可变的。不能对元组中的元素进行添加,修改和删除操作。如果需修改元组内容只有重建元组。元组用小括号来表示。如tuple=(1,2,3)。
tuple=(1,),这是单个元素的元组表示,需加额外的逗号。
tuple=1,2,3,4,这也可以是一个元组,在不使用圆括号而不会导致混淆时,Python允许不使用圆括号的元组。
和列表一样,可对元组进行索引、分片、连接和重复。也可用len()求元组长度。
元组的索引用tuple[i]的形式,而不是tuple(i)。 |
和列表类似,使用tuple(seq)可把其它序列类型转换成元组。
Dictionary字典
字典是一个用大括号括起来的键值对,字典元素分为两部份,键(key)和值。字典是python中唯一内置映射数据类型。通过指定的键从字典访问值。如:
monthdays = { "Jan":31, "Feb":28, "Mar":31, "Apr":30, "May":31, "Jun":30, "Jul":31, "Aug":31, "Sep":30, "Oct":31, "Nov":30,"Dec":31 }
字典可嵌套,可以在一个字典里包含另一个字典。如test={"test":{"mytest":10} }
可用键访问字典,如monthdays["Jan"],可访问值31。如果没有找到指定的键,则解释器会引起异常。
字典是可修改,如monthdays["Jan"]=30,可把Jan的值由31改为30。如monthdays["test"]=30可添加一个新键值对。
del monthdays["test"]可删除字典条目。
字典不属序列对象,所以不能进行连接和相乘操作。字典是没有顺序的。
字典提供keys和values方法,用来返回字典中定义的所有键和值。
和列表一样,字典也提供了对象方法来对字典进行操作。
字典方法
方法 | 描述 |
---|---|
has_key(x) | 如果字典中有键x,则返回真。 |
keys() | 返回字典中键的列表 |
values() | 返回字典中值的列表。 |
items() | 返回tuples的列表。每个tuple由字典的键和相应值组成。 |
clear() | 删除字典的所有条目。 |
copy() | 返回字典高层结构的一个拷贝,但不复制嵌入结构,而只复制对那些结构的引用。 |
update(x) | 用字典x中的键值对更新字典内容。 |
get(x[,y]) | 返回键x,若未找到该键返回none,若提供y,则未找到x时返回y。 |