Python基本数据结构

  1 第一部分:  
  2   
  3   
  4 #列表a = [11,22,24,29,30,32]  
  5   
  6 #1 把28插入到列表的末端  
  7 >>> a.append(28)  
  8 >>> a  
  9 [11, 22, 24, 29, 30, 32, 28]  
 10   
 11 #2 在元素29后面插入元素57  
 12 >>> a.insert(4,57)  
 13 >>> a  
 14 [11, 22, 24, 29, 57, 30, 32, 28]  
 15   
 16 #3 把元素11修改成6  
 17 >>> a[0]=6  
 18 >>> a  
 19 [6, 22, 24, 29, 57, 30, 32, 28]  
 20   
 21 #3 删除元素32  
 22 >>> a.pop(-2)  
 23 32  
 24 >>> a  
 25 [6, 22, 24, 29, 57, 30, 28]  
 26   
 27 #4 对列表从小到大排序  
 28 >>> a.sort()  
 29 >>> a  
 30 [6, 22, 24, 28, 29, 30, 57]  
 31   
 32 ##习题2:  
 33   
 34   
 35 #列表b = [1,2,3,4,5]  
 36   
 37   
 38 #1 用2种方法输出下面的结果:  
 39   
 40 [1,2,3,4,5,6,7,8]  
 41 >>> b+[6,7,8]  
 42 [1, 2, 3, 4, 5, 6, 7, 8]  
 43   
 44 >>> b.extend([6,7,8])  
 45 >>> b  
 46 [1, 2, 3, 4, 5, 6, 7, 8]  
 47 #2 用列表的2种方法返回结果:[5,4]  
 48 >>> b[-4:-6:-1]  
 49 [5, 4]  
 50   
 51 >>> d=[]  
 52 >>> d.append(b[-4])  
 53 >>> d.append(b[-5])  
 54 >>> d  
 55 [5, 4]  
 56   
 57 #3 判断2是否在列表里  
 58 >>> 2 in b  
 59 True  
 60   
 61 ##习题3:  
 62   
 63 #b = [23,45,22,44,25,66,78]  
 64   
 65 #用列表解析完成下面习题:  
 66   
 67   
 68 #1 生成所有奇数组成的列表  
 69   
 70 >>> b=[23,45,22,44,25,66,78]  
 71 >>> b  
 72 [23, 45, 22, 44, 25, 66, 78]  
 73 >>> [i for i in b if i % 2==1]  
 74 [23, 45, 25]  
 75   
 76 #2 输出结果: ['the content 23','the content 45']  
 77   
 78 >>> ["the content %s" % m for m in b[0:2:1]]  
 79 ['the content 23', 'the content 45']  
 80   
 81 #3 输出结果: [25, 47, 24, 46, 27, 68, 80]  
 82 >>> [m+2 for m in b]  
 83 [25, 47, 24, 46, 27, 68, 80]  
 84   
 85 ##习题4:  
 86   
 87   
 88 #用range方法和列表推导的方法生成列表:  
 89   
 90 #[11,22,33]  
 91   
 92 >>> range(11,34,11) #range(起始,结束+1,步长)  
 93 [11, 22, 33]  
 94 >>> [m *11 for m in range(1,4,1)]  
 95 [11, 22, 33]  
 96 ##习题5:  
 97   
 98   
 99 #已知元组:a = (1,4,5,6,7)  
100   
101   
102 #1 判断元素4是否在元组里  
103 >>> 4 in a  
104 True  
105   
106 #2 把元素5修改成8  
107 >>> a(2)=8  
108 SyntaxError: can't assign to function call  
109 >>> c=list(a)  
110 >>> c  
111 [1, 4, 5, 6, 7]  
112 >>> c[2]=8  
113 >>> c  
114 [1, 4, 8, 6, 7]  
115 >>> a=tuple(c)  
116 >>> a  
117 (1, 4, 8, 6, 7)  
118 ##习题6:  
119   
120   
121 #已知集合:setinfo = set('acbdfem')和集合finfo = set('sabcdef')完成下面操作:  
122   
123   
124 #1 添加字符串对象'abc'到集合setinfo  
125 >>> setinfo=set('abcdfem')  
126 >>> setinfo  
127 set(['a', 'c', 'b', 'e', 'd', 'f', 'm'])  
128 >>> setinfo.add('abc')  
129 >>> setinfo  
130 set(['a', 'c', 'b', 'e', 'd', 'f', 'm', 'abc'])  
131   
132 #2 删除集合setinfo里面的成员m  
133 >>> setinfo.remove('m')  
134 >>> setinfo  
135 set(['a', 'c', 'b', 'e', 'd', 'f', 'abc'])  
136   
137 #3 求2个集合的交集和并集  
138 >>> finfo=set('sabcdef')  
139 >>> finfo  
140 set(['a', 'c', 'b', 'e', 'd', 'f', 's'])  
141 >>> setinfo & finfo  
142 set(['a', 'c', 'b', 'e', 'd', 'f'])  
143 >>> setinfo | finfo  
144 set(['a', 'c', 'b', 'e', 'd', 'f', 's', 'abc'])  
145   
146 ##习题7:  
147   
148   
149 #用字典的方式完成下面一个小型的学生管理系统。  
150   
151   
152 #1 学生有下面几个属性:姓名,年龄,考试分数包括:语文,数学,英语得分。  
153   
154 """ 
155 比如定义2个同学: 
156  
157  
158 姓名:李明,年龄25,考试分数:语文80,数学75,英语85 
159  
160  
161 姓名:张强,年龄23,考试分数:语文75,数学82,英语78 
162 """  
163 >>> studentinfo={'liming':{'name':'LiMing','age':25,'score':{'chinese':80,'math':75,'english':85}}}  
164 >>> studentinfo  
165 {'liming': {'age': 25, 'score': {'math': 75, 'chinese': 80, 'english': 85}, 'name': 'LiMing'}}  
166 >>> studentinfo['zhangqiang']={'age':25,'name':'ZhangQiang','score':{'chinese':75,'math':82,'english':78}}  
167 >>> studentinfo  
168 {'liming': {'age': 25, 'score': {'math': 75, 'chinese': 80, 'english': 85}, 'name': 'LiMing'}, 'zhangqiang': {'age': 25, 'score': {'math': 82, 'chinese': 75, 'english': 78}, 'name': 'ZhangQiang'}}  
169   
170 #2 给学生添加一门python课程成绩,李明60分,张强:80分  
171 >>> studentinfo['liming']['score']['python']=60  
172 >>> studentinfo['liming']  
173 {'age': 25, 'score': {'python': 60, 'math': 75, 'chinese': 80, 'english': 85}, 'name': 'LiMing'}  
174 >>> studentinfo['zhangqiang']['score']['python']=80  
175 >>> studentinfo['zhangqiang']  
176 {'age': 25, 'score': {'python': 80, 'math': 82, 'chinese': 75, 'english': 78}, 'name': 'ZhangQiang'}  
177   
178   
179 #3 把张强的数学成绩由82分改成89分  
180 >>> studentinfo['zhangqiang']['score']['math']=89  
181 >>> studentinfo['zhangqiang']  
182 {'age': 25, 'score': {'python': 80, 'math': 89, 'chinese': 75, 'english': 78}, 'name': 'ZhangQiang'}  
183   
184   
185 #4 删除李明的年龄数据  
186 >>> del studentinfo['liming']['age']  
187 >>> studentinfo  
188 {'liming': {'score': {'python': 60, 'math': 75, 'chinese': 80, 'english': 85}, 'name': 'LiMing'}, 'zhangqiang': {'age': 25, 'score': {'python': 80, 'math': 89, 'chinese': 75, 'english': 78}, 'name': 'ZhangQiang'}}  
189   
190   
191 #5 对张强同学的课程分数按照从低到高排序输出。  
192 >>> b=studentinfo['zhangqiang']['score'].values()  
193 >>> b  
194 [80, 89, 75, 78]  
195 >>> b.sort()  
196 >>> b  
197 [75, 78, 80, 89]  
198   
199 #6 外部删除学生所在的城市属性,不存在返回字符串 beijing  
200 >>> studentinfo.pop('city','beijing')   #若存在键名'city'  返回其属性  否则返回'beijing'  
201 'beijing'  

 

  1 第二部分:  
  2   
  3 一.已经字符串 s = "i,am,lilei",请用两种办法取出之间的“am”字符。  
  4 >>> s="i,am,lilei"  
  5 >>> s[2:4]              #字符串切片  
  6 'am'  
  7 >>> s.split(',')[1]   
  8 'am'  
  9 更多关于split函数:http://blog.csdn.net/holyang_1013197377/article/details/49205065  
 10   
 11 二.在python中,如何修改字符串?  
 12 >>> s="i love php"  
 13 >>> s.replace('php','python')  
 14 'i love python'  
 15   
 16 三.bool("2012" == 2012) 的结果是什么。  
 17 >>> bool("2012"==2012)  
 18 False  
 19   
 20   
 21 四.已知如下变量  
 22 ________  
 23 a = "字符串拼接1"  
 24 b = "字符串拼接2"  
 25 ________  
 26   
 27 1.请用四种以上的方式将a与b拼接成字符串c。并指出每一种方法的优劣。  
 28 a="string1"  
 29 b="string2"  
 30 c1=a+b  #1不适合大量字符串拼接  
 31   
 32 c2="%s%s" % (a,b) #2受顺序限制  
 33   
 34 print 'format'  
 35 c3="{a}{b}" . format(a=a,b=b) #3 未受顺序限制  
 36   
 37 c4="".join([a,b])  #4 只要申请一次内存  
 38 print c4  
 39   
 40 2.请计算出新拼接出来的字符串长度,并取出其中的第七个字符。  
 41 lennum=len(c1.encode('utf-8'))  
 42 print c1.encode('utf-8')[6].encode('utf-8')  
 43   
 44 五.请阅读string模块,并且,根据string模块的内置方法输出如下几题的答案。  
 45   
 46 1.包含0-9的数字。  
 47 >>> print string.digits  
 48 0123456789  
 49   
 50 2.所有小写字母。  
 51 >>> print string.lowercase  
 52 abcdefghijklmnopqrstuvwxyz  
 53   
 54 3.所有标点符号。  
 55 >>> print string.punctuation  
 56 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~  
 57   
 58 4.所有大写字母和小写字母。  
 59 >>> print string.ascii_uppercase  
 60 ABCDEFGHIJKLMNOPQRSTUVWXYZ  
 61 >>> print string.lowercase  
 62 abcdefghijklmnopqrstuvwxyz  
 63   
 64 5.请使用你认为最好的办法将{1}-{4}点中的字符串拼接成一个字符串。  
 65 >>> string.digits+string.lowercase+string.uppercase+string.punctuation  
 66 '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'  
 67   
 68 strinfo = []  
 69 strinfo.append(string.digits)  
 70 strinfo.append(string.lowercase)  
 71 strinfo.append(string.punctuation)  
 72 strinfo.append(string.ascii_lowercase)  
 73 strinfo.append(string.ascii_uppercase)  
 74 print "".join(strinfo)  
 75 print '\n'  
 76   
 77 strinfo = "%s%s%s%s%s" % (string.digits,string.lowercase,string.punctuation,string.ascii_lowercase,string.ascii_uppercase)  
 78 print strinfo  
 79   
 80 九.已知字符串  
 81 ________  
 82   
 83 a = "i,am,a,boy,in,china"  
 84 ________  
 85   
 86 1.假设boy和china是随时可能变换的,例boy可能改成girl或者gay,而china可能会改成别的国家,你会如何将上面的字符串,变为可配置的。  
 87 >>> exp1="i,am,a,%(sex)s,in,%(country)s" % {'sex':'boy','country':'China'}  
 88 >>> print exp1  
 89 i,am,a,boy,in,China  
 90 >>> exp2="i,am,a,{sex},in,{country}".format (sex='girl',country='USA')  
 91 >>> print exp2  
 92 i,am,a,girl,in,USA  
 93   
 94 2.请使用2种办法取出其间的字符"boy""china" 95 >>> print exp1[7:10]  
 96 boy  
 97 >>> print exp1.split(',')[3]  
 98 boy  
 99 >>> print exp1[-5:]  
100 China  
101 >>> print exp1.split(',')[-1]  
102 China  
103   
104 3.请找出第一个"i"出现的位置。  
105 >>> exp1.index('i')  
106 0  
107 >>> exp1.find('i')  
108 0  
109   
110 4.请找出"china"中的"i"字符在字符串a中的位置。  
111 >>> print exp1.find('i',exp1.find('China'))  
112 16  
113 >>> print exp1.rfind('i')       #找第二个'i'字符  
114 16  
115   
116 5.请计算该字符串一共有几个逗号。  
117 >>> print exp1.count(',')  
118 5  
119   
120 十.请将模块string的帮助文档保存为一个文件。  
121 import sys  
122 import string  
123   
124 f=open('string_help.log','w')  
125 sys.stdout=f  
126 help(string)  
127 f.close()  
 1 1. 已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下  
 2 1.1 请将a字符串的大写改为小写,小写改为大写。  
 3 print a.upper()  
 4 print a.lower()  
 5   
 6 1.2 请将a字符串的数字取出,并输出成一个新的字符串。  
 7 print ''.join([s for s in a if s.isdigit()])  
 8 #解释  
 9 [s      for s in a if s.isdigit()]  
10 l=[]  
11 for s in a:  
12     if s.isdigit():  
13         l.append(s)  
14 print l  
15   
16 1.3 请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 print a.count('a')  
17 print dict([(x,a.count(x)) for x in set(a)])#set去重  
18   
19 1.4 请去除a字符串多次出现的字母,仅留最先出现的一个。例 'abcabb',经过去除后,输出 'abc'  
20 a_list=list(a)  
21 #print set(a_list)   #set 去重  无序  字典和集合不可排序  
22 set_list=list(set(a_list)) #去重以后转化为list  
23 set_list.sort(key=a_list.index)#对去重后按照list原来排序  
24 print ''.join(set_list)    #拼接成字符串  
25   
26 1.5 请将a字符串反转并输出。例:'abc'的反转是'cba'  
27 print a[::-1]  
28   
29 1.6 去除a字符串内的数字后,请将该字符串里的单词重新排序(a-z),并且重新输出一个排序后的字符 串。(保留大小写,a与A的顺序关系为:A在a前面。例:AaBb)  
30   
31 1.要有小写字母a-z的排序  
32 2.大小写相同的大写在前面  
33   
34 l=sorted(a)  
35 #print l  sort排序结果:字母数字分开排序  
36 a_upper_list=[]     #声明大写list  
37 a_lower_list=[]     #声明小写list  
38 for x in l:         #遍历排序过的list 将大小写分别存在两个list中  
39     if x.isupper():  
40         a_upper_list.append(x)  
41     elif x.islower():  
42         a_lower_list.append(x)  
43     else:  
44         pass  
45   
46 for y in a_upper_list: #遍历大写list   
47     y_lower=y.lower()  
48     if y_lower in a_lower_list:  
49         a_lower_list.insert(a_lower_list.index(y_lower),y) #把大写list中的字母插入到 原来这个位置是该字母小写的位置 不覆盖  顺延 index定位  
50 #print a_lower_list  
51 print ''.join(a_lower_list)  #拼接成字符串输出  
52   
53   
54 1.7 请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输 出False.  
55 search='boy'  
56 b=set(a)  
57 b.update(search) #update特性  如果b中有的字符  search中的字符就插不进去  
58 print len(set(a))==len(a)  
59   
60 1.8 要求如1.7,此时的单词判断,由'boy'改为四个,分别是 'boy','girl','bird','dirty',请判断如上这4个字符串里的每个字母,是否都出现在a字符串里。  
61 search=['boy','girl','bird','dirty']  
62 b=set(a)  
63 print b  
64 for i in search:  
65     b.update(i)  
66 print len(set(a))==len(a)  
67   
68 1.9 输出a字符串出现频率最高的字母  
69 #set 去重  
70 l=([(x,a.count(x))for x in set(a)])  
71 l.sort(key=lambda k:k[1],reverse=True) #两次排序 :指定排序 第一个键  reverse从大向小排序  
72 print l[0]  
73 print l  
74   
75 2.一文件的字节数为 102324123499123,请计算该文件按照kb与mb计算得到的大小。  
76 size=102324123499123  
77 print '%s kb' % (size>>10)  
78 print '%s mb' % (size>>20)  
79   
80 3.已知  a =  [1,2,3,6,8,9,10,14,17],请将该list转换为字符串,例如 '123689101417'.  
81 a =  [1,2,3,6,8,9,10,14,17]  
82 print str(a)[1:-1].replace(', ','')

转载:http://blog.csdn.net/holyang_1013197377/article/details/49185605

posted @ 2016-12-20 12:01  小黑、  阅读(3571)  评论(0编辑  收藏  举报