python中序列及用户输入

python的list

list是形如a=['name','age','senior'] 这样的以[]表示的数组,list是有序可变的,——列表,可以添加删除更改获取其中元素;

元素索引

python中索引是从0开始的,而且支持倒序获取;如’name’是a[0];’senior’是a[2]同时也是a[-1];

元素操作

>>> a.append(5) #在list末尾添加数字元素5;
>>> a.insert(2,'gatsby') #将字符串元素'gatsby'插入到索引为2的位置;
>>> a.pop() #删除list末尾的元素;
>>> a.pop(1) #删除list中索引为1的元素;
>>> a[0]='chaoyang' #将索引为0的元素更改为'chaoyang'

这时a == ['chaoyang', 'gatsby', 'senior']
当然,list中的元素也可以是一个list,如b = [3,'test',a] 其中a是上面的list。

python的tuple

tuple是形如a = ('name','age','senior') 这样以()表示的数组,tuple是有序不可变的,——元组,虽然和list很相像,但是不能添加删除元素只能通过a[0] 索引方式获取元素;或者可以理解为,tuple只有读权限没有写权限;而list具有读写权限;这样来看tuple比list的安全性要高一些。当然tuple可以直接删除整个tuple。

因为tuple只有读权限,所以一个tuple一旦使用,其中元素必须在初始化时就确定下来;可以有多个元素可以是一个空元组也可以只有一个元素;值得注意的是只有一个元素时元素后须有逗号以防解释器认为这是一个数学公式或变量;

>>> a = ('name','age') # a是一个两元素的tuple
>>> b = () # b是一个空tuple
>>> c = ('name',) # c是一个一元素的tuple
>>> d = ('name') # d是一个字符串变量

tuple指向不变性

tuple中的不可变指的是,每一个索引对应的位置不变,而不是具体的数值不变;如:若索引为1的对应位置为具体的数值或者字符串,则该元素不变;若对应位置为一个list,此时list中的元素可以添加删除更改,但其实索引指向的位置仍旧是没有改变的。

python的dictionary

dictionary是形如a = {'name':'chaoyang','age':23,'senior':'forth'}这样以{}表示的无序数组——字典;通过键-值对应存储数据,其中,值value才是需要的数据,键key只是由coder自定义的显式的“索引”;因此其最大的好处是通过key快速查找对应value

引自www.liaoxuefeng.com——

为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。
第二种方法是先在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到这个字,无论找哪个字,这种查找速度都非常快,不会随着字典大小的增加而变慢。
dict就是第二种实现方式,给定一个名字,比如’name’,dict在内部就可以直接计算出name对应的存放名字的“页码”,也就是’chaoyang’这个字符串存放的内存地址,直接取出来,所以速度非常快。

dictionary操作

字典是具有读写操作的,可以添加删除更改获取其中键-值;另外,python提供了一种判断某个key是否存在的操作;操作如下:

>>> dict = {'name':'chaoyang','age':23,'senior':'forth'}
>>> dict['major'] = 'AI' # 添加一对键-值 'major':'AI'
>>> dict.pop('senior') #删除key'senior'及其值
>>> dict['age'] = 24 # 更改'age'的值为24
>>> dict['name'] # 获取'name'对应值
>>> 'major' in dict #判断键'major'是否存在于dict字典,是返回true 否返回false

值得一提的是,在字典中,键一般不能重复;如果键重复则默认以后一个键的值为对应,相当于更改了键的值。另外,键必须为不可变对象如数字字符串或者元组而不能是list这类具有读写权限的可变数组。

python的set

set,集合,是和字典一样用{}界定,但是只有key而没有value的无序数组,形如a = {3,4} ,且set中每个元素都是唯一的,不可重复。和字典一样的是,其中元素必须是不可变对象,且无法像list那样通过索引直接获取元素。

set操作

set() 可以将list或者tuple转换成集合并过滤重复元素。另外可以添加删除元素,也可以像数学集合运算那样进行交集并集求解。

>>> a = {3,4} # 创建集合a
>>> b = [1,2,3,4] # 创建list b
>>> b_set = set(b) # 将list b 转化为集合b_set
>>> c = (1,2,2,4) # 创建 tuple c
>>> c_set = set(c) # 将tuple c 转化为集合c_set
>>> a.add(2) # 添加元素2至集合a
>>> a.remove(4) # 从集合a删除元素4
>>> x = a & b_set # 求a和b_set的交集
>>> y = a | c_set # a和c_set的并集

关于序列总结

list[] tuple() dictionary{} set{}四种序列方式,其中list和tuple都是有序的,所谓有序,就是可以直接通过索引的方式,如a[0]这样获取该索引指向的元素值;而像dictionary和set这样的无序序列,就无法通过索引获取;但是dictionary有键-值对,我个人认为其中键就像是自定义的“索引”,因此可以通过键获取对应的值。
在使用中,list可读可写,操作性强,因此应用较多;tuple可读不能写,安全性高可作为封装使用;dictionary可用于通过键快速获取对应值;set特点则是元素唯一性及其可操作的并集交集。

(用户输入)

输入输出其实是用户和解释器交互的一种直接方式,代码里有什么信息可以print;同样,代码需要什么信息可以通过input或raw_input读取用户输入。通过x = input() 或者x = raw_input() 的方式,用户输入信息存放至 x 变量中;当然为了交互性可以x = input("please give a input:") ,不至于再多写个print。
注意两个不同的是,通过x = input() 的方式,数字可以直接输入,如果输入是字符或者字符串,需要用户显式地用引号说明,否则系统会报错的;如:

>>> x = input("give a input:")
give a input:'chaoyang'
>>> y = input("give a input again:")
give a input again:123
>>> x
'chaoyang'
>>> y
123

但是如果通过x = raw_input() 的方式,字符或字符串不需要引号说明,直接输入,包括数字也是;之所以可以这样,是因为raw_input()获得的数据全部以字符的方式存储;如:

>>> x = raw_input("give a input:")
give a input:chaoyang
>>> y = raw_input("give a input again:")
give a input again:123
>>> z = raw_input("give the third input:")
give the third input:'test'
>>> x
'chaoyang'
>>> y
'123'
>>> z
"'test'"