标签:python
列表和元祖
列表取值和切片的演示:
strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] print(strings[0]) # 从0开始计数,所以第一个元素是0 print(strings[1:4]) # 切片,从起点开始,但是不包括终点 print(strings[4:]) # 缺省终点,则切到结尾 print(strings[:3]) # 也可以缺省起点,则从头开始 print(strings[::2]) # 所以头尾都省了,就是从头到尾。这里加上了步长,因为头尾步长3个参数都省了,那就是打印整个列表print(strings) print(strings[0:5:2]) # 第三个参数是步长,默认1 print(strings[-2]) # 取倒数第2个 print(strings[-4:-2]) # 永远是从左往右取,所以-4放前面
追加列表、插入列表、修改列表:
strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] strings.append(‘z‘) # 在最后追加 print(strings) strings.insert(1,‘i1‘) # 插到1的位置 print(strings) strings[4] = ‘D2‘ # 修改 print(strings)
删除列表:
strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] strings.remove(‘c‘) # 不能删除不存在的成员 print(strings) strings.pop() # 缺省参数,删除最后一个 print(strings) strings.pop(1) # 如果带了参数,就是删除那一个 print(strings) del strings[0] # 也是不能删除不存在的。这里和带参数的pop是一样的 print(strings)
查找元素:
strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] strings.append(‘e‘) print(strings.count(‘e‘)) # 返回列表中这个元素出现的次数 print(strings.index(‘e‘)) # 返回列表中这个元素的位置。但是只有第一个匹配项。但是如果没找到会报错 print(‘f‘ in strings) # in 和 not in之前已经学过了。可以做元素是否存在于列表中的判断 print(‘h‘ not in strings)
反转、合并、排序,最后清空:
strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] print(strings) strings.reverse() # 反转列表 print(strings) strings.extend([‘2‘,‘!‘,"AA"]) # 合并列表,直接用+号结果也一样,但是+号有效率问题吧 print(strings) strings.sort() # 排序,元素不能混有数字和字符串,否则排序会报错。这里是2是字符 print(strings) # 排序按ASCII码排,符号,数字,大写,小写。中文字符排最后 strings.clear() # 清空列表 print(strings)
列表的复制使用.copy()
列表里的元素也可以是另一个列表,下面一起演示
strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] strings.insert(2,[‘A‘,‘B‘,‘C‘]) # 插入一个元素,这个元素是另一个列表 strings2 = strings.copy() # 复制列表 print(strings2) strings[0] = ‘apple‘ # 修改原始表的元素 strings[2][1] = ‘BOY‘ # 2层列表中的元素是这样表示的 print(strings) print(strings2) # 注意1层元素没变,但是2层的元素也变了,虽然之前操作的原始表的元素
列表里每个元素占一个空间,1层的元素这个空间存的就是值,copy的时候就是将这个值复制了。但是二层的情况,在一层的表里也只占1个元素的位置,这里存的值就是下面二层表的内存地址。所以无论在哪张list里修改2层的元素,两张表都会变化。
列表使用赋值=和copy效果是不同的,使用=完全就是复制了内存地址,等于只是给这个列表起了一个别名
strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] strings3 = strings print(strings3) strings[0] = ‘apple‘ # 修改原始表的元素 print(strings) print(strings3) # 虽然没修改这张表,但是内容和原始表是一样的
所以要向真正的复制一张表,需要import copy 这个模块
import copy strings = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] strings.insert(2,[‘A‘,‘B‘,‘C‘]) # 插入一个元素,这个元素是另一个列表 strings2 = copy.copy(strings) # 和之前的复制列表一样 strings3 = copy.deepcopy(strings) # 深copy,这个是我们需要的 print(strings2) print(strings3) strings[0] = ‘apple‘ # 修改原始表的元素 strings[2][1] = ‘BOY‘ # 修改2层里的元素 print(strings) print(strings2) # 1层没变,2层还是被修改了 print(strings3) # 这里的元素完全不受原始表变化的影响
元组和列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
元组只有count和index这2个方法。
strings1 = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘] # 这个是列表list strings2 = (‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘) # 这个是元祖tuple print(type(strings1),type(strings2)) print(strings1) print(strings2)
可以把那种不希望被修改的数据,比如常量、比如连接参数,存放在元组里
enumerate()函数
可以方便的一次获得元素的下标和值,比较实用
strings = [‘a‘,‘b‘,‘c‘,‘d‘] # 下标和值构成了一个元组 for i in enumerate(strings): print(i) print(‘******‘) # 这样写,就依次输出了下标和值,而不是以元组的形式出现了 for i,j in enumerate(strings): print(i,j) print(‘******‘) # 应用的时候还是用index和item,这样意义比较明确。另外可以带上一个参数,指定下标的起始值 for index,item in enumerate(strings,1): print(index,item)
字符串操作
自动填充的函数有点用处,先记一下。否则在需要用的时候很有可能要手动填充。
string = "hello" print(string.center(10,‘=‘)) # 内容在中间,两边填充 print(string.ljust(10,‘=‘)) # 内容在左边,右边填充 print(string.rjust(10,‘=‘)) # 内容在右边,左边填充
参数1定义了字符串的长度,不足就用参数2的字符填充。
字典
字典是key:value的数据类型
字典是无序的
key必须唯一
# 创建字典 dic1 = {} # 创建一个空的字典 dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} print(dic1,dic2)
修改和增加
dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} dic2[‘class‘] = ‘First‘ # 如果key不存在,则增减 dic2[‘job‘] = ‘teacher‘ # 如果key存在,则修改 print(dic2)
还有一种增加的方法,setdefault,注意下面的参数中间使用的是逗号。只会新增没有的key,不会修改已有的key
dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} dic2.setdefault(‘name‘,‘Tom‘) # 最后结果,name并不会被修改 dic2.setdefault(‘class‘,‘First‘) # 最后结果,增加了class这项 print(dic2)
删除:删除字典内的元素推荐2中方法:
dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} dic2.pop(‘gender‘) del dic2[‘job‘] print(dic2)
查找也给了2个方法,推荐用get
dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} print(‘job‘ in dic2) # 返回True,返回字典里是否有这个key print(dic2[‘job‘]) # 返回key的值(Value)。如果key不存在则会报错 print(dic2.get(‘name‘)) # 如果key存在,返回值 print(dic2.get(‘name2‘)) # 如果key不存在,返回None
可以列出所有的key或所有的value
dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} print(dic2.values()) print(dic2.keys())
还可以把字典转成列表
dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} print(dic2.items())
update,合并更新字典。把参数中的表合并更新到前面的表。没有的key会新增,已有的key和做修改
dic2 = {‘name‘:‘Bob‘, ‘job‘:‘engineer‘, ‘gender‘:‘male‘} dic3 = {‘job‘:‘teacher‘, ‘class‘:‘First‘} print(dic2) print(dic3) dic2.update(dic3) print(dic2) print(dic3)
字典初始化:第一个参数是字典的所有的key,第二个参数是所有value的默认值。这里第二个参数不要再嵌套元组或列表这类数据类型,否则默认赋的值将会是这个列表或元素的内存地址,导致所有的value都是关联的同一个值
dictmp = {} dic = dictmp.fromkeys([‘name‘,‘job‘,‘gender‘],‘N/A‘) print(dic)
标签:python
原文地址:http://steed.blog.51cto.com/10732289/1977821