一. dictionary
dictionary是Python的内置数据类型之一,它定义了键值之间的一对一的关系。类似于perl中的hash,java中的HashMap。
定义一个dictionary
#-------------------------------------------------------------------------------
# Name: DictionaryTest
# Purpose:
# Dictionary 是 Python 的内置数据类型之一,它定义了键和值间的一一对应关系
# Author: zdk
#
# Created: 01/02/2013
# Copyright: (c) zdk 2013
# Licence: <your licence>
#-------------------------------------------------------------------------------
if __name__ == '__main__':
#定义一个dictionary
d = {"name":"zdk","age":18}
print("the dictionary is :", d)
#获取一个key对应的value
print("the key is name and the value is:",d["name"])
(1)首先我们创建了新的dictionary,它有2个元素,将变量赋值为d。每个元素都是一个key-value对;整个元素集合用大括号括起来。
(2)name是一个key,它所关联的值通过d["name"]来引用。
(3)当引用的key在d中不存在时会引发异常。
(4)dictionary是无序的。
dictionary的修改
#添加一个新的key-value键值对
d["gender"] = "man";
print("the new dictionary is :", d)
#覆盖已存在的key的value值
d["gender"] = "superMan";
print("the new dictionary is :", d)
#dictionary的key是大小写敏感的
d["GENDER"] = "SuperMan";
print("the new dictionary is :", d)
(1)在任何时候都可以加入新的key-value对
(2)在一个dictionary中不能有重复的key,给一个存在的key赋值会覆盖原来的值
(3)dictionary得key是大小写敏感的。
从dictionary中删除元素
#删除元素
del d["GENDER"]
print("the dictionary is :", d)
d.clear();
print("after all clear,the dictionary is :", d)
(1)del允许使用key从一个dictionary中删除独立的元素
(2)clear从一个dictionary中清除所有元素,留下空的大括号。
二. list
list是python中使用最频繁的数据类型,类似于perl中的数组或java中的ArrayList
#-------------------------------------------------------------------------------
# Name: ListTest
# Purpose:
# list是python中使用最频繁的数据类型,类似于perl中的数组或java中的ArrayList
# Author: zdk
#
# Created: 01/02/2013
# Copyright: (c) zdk 2013
# Licence: <your licence>
#-------------------------------------------------------------------------------
if __name__ == '__main__':
#定义一个list
li = ["a", "b", "mpilgrim", "z", "example"]
print(li)
print(li[0])
print(li[4])
a
example
(1)首先我们定义了一个有5个元素的list。注意它们保持着初始的顺序,这不是偶然,list是一个用方括号包括起来的有序元素集合。
(2)list可以作为以0为下标开始的数组。任何非空list的第一个元素的下标总是0
(3)这个包含5个元素list的最后一个元素是li[4],因为列表总是从0开始。
负的list索引和分片
#负的list索引
print("li is: ",li)
print("li[-1] is: ", li[-1])
print("li[-3] is: ",li[-3])
#list分片
print("li[1:3] is: ",li[1:3])
print("li[1:-1] is: ",li[1:-1])
print("li[0:3] is: ",li[0:3])
li[-1] is: example
li[-3] is: mpilgrim
li[1:3] is: ['b', 'mpilgrim']
li[1:-1] is: ['b', 'mpilgrim', 'z']
li[0:3] is: ['a', 'b', 'mpilgrim']
(1)负数索引从list的尾部开始向前计数来存取元素。任何一个非空list最后一个元素总是li[-1]。
(2)如果负数索引使你感到迷惑,可以这样理解:li[-n]==li[len[li]-n]。所以在这个list里,li[-3]==li[5-3]==li[2]。
(3)你可以通过指定2个索引得到一个list的子集。
(4)第一个索引指定了你想要的第一个元素,第二个索引指定了第一个你不想要的元素。
分片的简写
#分片的简写
print("li[:3] is: ",li[:3])
print("li[1:] is: ",li[1:])
print("li[:] is: ",li[:])
li[1:] is: ['b', 'mpilgrim', 'z', 'example']
li[:] is: ['a', 'b', 'mpilgrim', 'z', 'example']
(1)如果左侧索引为空,则默认为0,如果右侧索引为空,则默认为list的长度。
向list中增加元素
#向list中增加元素
print("before li.append(\"new\") is: ",li[:])
li.append("new")
print("after li.append(\"new\") is: ",li[:])
li.insert(2,"new")
print("after li.insert(2,\"new\") is: ",li[:])
li.extend(["two","elements"])
print("after li.extend([\"two\",\"elements\"]) is: ",li[:])
after li.append("new") is: ['a', 'b', 'mpilgrim', 'z', 'example', 'new']
after li.insert(2,"new") is: ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new']
after li.extend(["two","elements"]) is: ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
(1)append向list末尾增加一个元素
(2)insert向指定索引增加一个元素
(3)extend连接2个list
三. tuple
tuple是不可变的list,一旦创建就不能以任何方式改变它
#-------------------------------------------------------------------------------
# coding: utf-8
# Name: TupleTest
# Purpose: tuple是不可变的list,一旦创建就不能以任何方式改变它。
#
# Author: zdk
#
# Created: 04/02/2013
# Copyright: (c) zdk 2013
#-------------------------------------------------------------------------------
def main():
#定义一个tuple
t = ["a", "b", "mpilgrim", "z", "example"]
print(t)
print(t[0])
print(t[-1])
print(t[1:3])
#tuple没有方法,不可以根据下标遍历,可以使用in检查某元素是否在tuple中
print("a" in t)
if __name__ == '__main__':
main()
a
example
['b', 'mpilgrim']
True
(1)tuple比list操作速度快
(2)如果对不需要修改的数据进行“写保护”
(3)tuple可以是dictionary的key,list不行
(4)tuple可以用在字符串格式化中,后面将会看到。
四. 汇总
一条命令可以使用“\”作为续行符
python的变量必须先赋值再使用,不然会抛异常
一次多赋值
v=('a','b','c')
(x,y,z)=v
v是一个三元素的tuple,并且(x,y,z)是一个三变量的tuple
连续赋值:
range(7) #[0,1,2,3,4,5,6]
(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
MONDAY #0
TUESDAY #1
字符串格式化
print("%s=%s" %(t[0],t[1]))
(t[0],t[1])是一个tuple,+只拼接字符串,格式化输出类型与C语言的printf可以有%d,%f等,当时一个元素的tuple时,必须增加一个",",如print("%s" %(t[0],))
list映射
li = [1, 9, 8, 4]
print([elem*2 for elem in li])
print(li)
li=[elem*2 for elem in li];
print(li)
[1, 9, 8, 4]
[2, 18, 16, 8]
(1)循环遍历li,对每一个elem*2后追加到新的list中
(2)elem*2不影响原来的list