3、数据结构的操作
3.1 迭代
-
列表推导/列表生成
#将字符串转化成对应的ascll字符
symbols = 'abcdef'
#列表推导
codes = [ord(symbol) for symbol in symbols]
#列表生成
codes = tuplle(ord(symbol) for symbol in symbols)
-
字典推导
#将列表转化为字典
DIAL_CODES = [(86,'CHINA'),(91,'INDIA'),(1,'UNITED STATE')]
country_code = {country:code for code,country in DIAL_CODES}
-
集合推导
#把编码在32~255之间的字符的名字里有”SIGN“单词的挑出来,放在一个集合中
{chr(i) for i in range(32,256) if 'SIGN' in name(chr(i),'')}
3.2切片
-
一维数组/列表,无非记住一个规则
arr_name[start : end :step]
[:]
表示复制源列表负的index表示,从后往前。-1表示最后一个元素
-
二维(多维)数组的一般语法为
arr_name[行操作,列操作]
取行数据:
-
arr[i,:] #取第i行数据arr[i:j, :] #取第i行到第j行的数据
取列数据:
-
arr[: ,0] #取第0列数据,以行的形式返回
-
arr[:, :1] #取第0列数据,以列的形式返回
取数据块:
-
arr[1:2, 1:3] #取第二行同时是第二列和地三列的元素
-
arr[:, ::2] #取第一维的全部,按步长取第二维索引0到末尾之间的元素
-
3.3排序
3.3.1排序
fruits = ['grape','raspberry','apple','banana']
#list.sort方法
fruits.sort(key=len,reverse=False)
#内置的sorted方法
sorted(fruits,key=len)
3.3.2 用bisect来搜索
#bisect(haystack, needle):在haystack(干草垛)中搜索needle(针)的位置
import bisect
HAYSTACK = [1,4,5,6,7,12,20,21,23,26,29,30]
NEEDLES = [0,1,2,5,8,10,22,23,29,30,31]
ROW_FMT = '{0:2d} {1:2d} {2}{0:<2d}'
for needle in reversed(NEEDLES):
position = bisect(HAYSTACK,needle)
offset = position * ' |'
print(ROW_FMT.format(needle,position,offset))
3.3.3 用bisect.insort向有序表插入值
#insort可以保持有序序列的顺序
import bisect
import random
SIZE = 7
random.seed(1729)
my_list = []
for i in range(SIZE):
new_item = random.randrange(SIZE*2)
bisect.insort(my_lsit,new_item)
print('%2d ->' % new_item,my_lsit)
3.4拼接
3.4.1字符串拼接
#直接通过加号(+)操作符连接 website w = 'python' + 'tab' + '.com' #join方法 listStr = ['python', 'tab', '.com'] website = ''.join(listStr)
3.4.2 列表拼接
aList = [123, 'xyz', 'zara', 'abc'] aList.append(2009) aList.extend([2010]) "Updated List : {}".format(aList)