Python练习数据结构笔记

#coding=utf-8
#1. 已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下
#
a = "aAsmr3idd4bgs7Dlsf9eAF"

#1.1 请将a字符串的大写改为小写,小写改为大写。
#
a = "aAsmr3idd4bgs7Dlsf9eAF"
print a.swapcase()

#1.2 请将a字符串的数字取出,并输出成一个新的字符串。
#
a = "aAsmr3idd4bgs7Dlsf9eAF"

print ''.join([s for s in a if s.isdigit()])

'''
[s for s in a if s.isdigit()]
''.join()

'''
#1.3 请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {'a':4,'b':2}
#
a = "aAsmr3idd4bgs7Dlsf9eAF"

a = a.lower()
print dict([(x,a.count(x)) for x in set(a)])
'''
dict([(x,a.count(x)) for x in set(a)])
dict()

[(x,a.count(x)) for x in set(a)]
'''
#1.4 请去除a字符串多次出现的字母,仅留最先出现的一个。例 'abcabb',经过去除后,输出 'abc'
#
a = "aAsmr3idd4bgs7Dlsf9eAF"
a_list = list(a) #转换成list
set_list = list(set(a_list)) #去重以后再转换回list
set_list.sort(key=a_list.index) #对去重以后的list进行原先的排序
print ''.join(set_list)#拼接成字符串

#1.5 请将a字符串反转并输出。例:'abc'的反转是'cba'
#
a = "aAsmr3idd4bgs7Dlsf9eAF"

print a[::-1] #步进

#1.6 去除a字符串内的数字后,请将该字符串里的单词重新排序(a-z),并且重新输出一个排序后的字符串。(保留大小写,a与A的顺序关系为:A在a前面。例:AaBb)
#
'''
1.要有小写字母从a-z的排序
2.大小写不同,但值相同的字母,大写在小写的前面
'''
a = "aAsmr3idd4bgs7Dlsf9eAF"
l = sorted(a)

a_upper_list = []
a_lower_list = []

for x in l:
if x.isupper():
a_upper_list.append(x)
elif x.islower():
a_lower_list.append(x)
else:
pass

for y in a_upper_list:
y_lower = y.lower()
if y_lower in a_lower_list:
a_lower_list.insert(a_lower_list.index(y_lower),y)

print ''.join(a_lower_list)
#1.7 请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输 出False.
#
a = "aAsmr3idd4bgs7Dlsf9eAF"
search = 'boy'
u = set(a)
u.update(list(search))
print len(set(a)) == len(u)

##下列解答来自swfer同学,这样更graceful:)
a = "aAsmr3idd4bgs7Dlsf9eAF"
print set('boy').issubset(set(a))
#1.8 要求如1.7,此时的单词判断,由'boy'改为四个,分别是 'boy','girl','bird','dirty',请判断如上这4个字符串里的每个字母,是否都出现在a字符串里。
#
a = "aAsmr3idd4bgs7Dlsf9eAF"
search = ['boy','girl','bird','dirty']

b = set(a)
for i in search:
b.update(list(i))

print len(b) == len(set(a))
##下列解答来自swfer同学,这样更graceful:)
a = "aAsmr3idd4bgs7Dlsf9eAF"
lst=['boy','girl','bird','dirty']
s=''.join(lst)
print set(s).issubset(set(a))

#1.9 输出a字符串出现频率最高的字母
a = "aAsmr3idd4bgs7Dlsf9eAF"

l = ([(x,a.count(x)) for x in set(a)])
l.sort(key = lambda k:k[1],reverse=True)
print l[0][0]
#
#
#2.在python命令行里,输入import this 以后出现的文档,统计该文档中,"be" "is" "than" 的出现次数。
#

import os
m = os.popen('python -m this').read()
m = m.replace('\n','')
l = m.split(' ')
print [(x,l.count(x)) for x in ['be','is','than']]

#
#3.一文件的字节数为 102324123499123,请计算该文件按照kb与mb计算得到的大小。
size = 102324123499123
print '%s kb'%(size >> 10)
print '%s mb'% (size >> 20)

#
#4.已知 a = [1,2,3,6,8,9,10,14,17],请将该list转换为字符串,例如 '123689101417'.
#
a = [1,2,3,6,8,9,10,14,17]
print str(a)[1:-1].replace(', ','')

#另外的几个简单的方法
list1=["1","2","3","4","5"]
print("".join(list1))
或则
list1=[1,2,3,4,5]
list1=map(str,list1)
print("".join(list1))

#

#第一部分:




#列表a = [11,22,24,29,30,32]


#1 把28插入到列表的末端
a.append(28)
a
[11, 22, 24, 29, 30, 32, 28]


#2 在元素29后面插入元素57
a.insert(4,57)
a
[11, 22, 24, 29, 57, 30, 32, 28]


#3 把元素11修改成6
a[0]=6
a
[6, 22, 24, 29, 57, 30, 32, 28]


#3 删除元素32
a.pop(-2)
32
a
[6, 22, 24, 29, 57, 30, 28]


#4 对列表从小到大排序
a.sort()
a
[6, 22, 24, 28, 29, 30, 57]


##习题2:




#列表b = [1,2,3,4,5]




#1 用2种方法输出下面的结果:


[1,2,3,4,5,6,7,8]
b+[6,7,8]
[1, 2, 3, 4, 5, 6, 7, 8]


b.extend([6,7,8])
b
[1, 2, 3, 4, 5, 6, 7, 8]
#2 用列表的2种方法返回结果:[5,4]
b[-4:-6:-1]
[5, 4]


d=[]
d.append(b[-4])
d.append(b[-5])
d
[5, 4]


#3 判断2是否在列表里
2 in b
True


##习题3:


#b = [23,45,22,44,25,66,78]


#用列表解析完成下面习题:




#1 生成所有奇数组成的列表


b=[23,45,22,44,25,66,78]
b
[23, 45, 22, 44, 25, 66, 78]
[i for i in b if i % 2==1]
[23, 45, 25]


#2 输出结果: ['the content 23','the content 45']


["the content %s" % m for m in b[0:2:1]]
['the content 23', 'the content 45']


#3 输出结果: [25, 47, 24, 46, 27, 68, 80]
[m+2 for m in b]
[25, 47, 24, 46, 27, 68, 80]


##习题4:




#用range方法和列表推导的方法生成列表:


#[11,22,33]


range(11,34,11) #range(起始,结束+1,步长)
[11, 22, 33]
[m *11 for m in range(1,4,1)]
[11, 22, 33]
##习题5:




#已知元组:a = (1,4,5,6,7)




#1 判断元素4是否在元组里
4 in a
True


#2 把元素5修改成8
a(2)=8
SyntaxError: can't assign to function call
c=list(a)
c
[1, 4, 5, 6, 7]
c[2]=8
c
[1, 4, 8, 6, 7]
a=tuple(c)
a
(1, 4, 8, 6, 7)
##习题6:




#已知集合:setinfo = set('acbdfem')和集合finfo = set('sabcdef')完成下面操作:




#1 添加字符串对象'abc'到集合setinfo
setinfo=set('abcdfem')
setinfo
set(['a', 'c', 'b', 'e', 'd', 'f', 'm'])
setinfo.add('abc')
setinfo
set(['a', 'c', 'b', 'e', 'd', 'f', 'm', 'abc'])


#2 删除集合setinfo里面的成员m
setinfo.remove('m')
setinfo
set(['a', 'c', 'b', 'e', 'd', 'f', 'abc'])


#3 求2个集合的交集和并集
finfo=set('sabcdef')
finfo
set(['a', 'c', 'b', 'e', 'd', 'f', 's'])
setinfo & finfo
set(['a', 'c', 'b', 'e', 'd', 'f'])
setinfo | finfo
set(['a', 'c', 'b', 'e', 'd', 'f', 's', 'abc'])


##习题7:




#用字典的方式完成下面一个小型的学生管理系统。




#1 学生有下面几个属性:姓名,年龄,考试分数包括:语文,数学,英语得分。


"""
比如定义2个同学:




姓名:李明,年龄25,考试分数:语文80,数学75,英语85




姓名:张强,年龄23,考试分数:语文75,数学82,英语78
"""
studentinfo={'liming':{'name':'LiMing','age':25,'score':{'chinese':80,'math':75,'english':85}}}
studentinfo
{'liming': {'age': 25, 'score': {'math': 75, 'chinese': 80, 'english': 85}, 'name': 'LiMing'}}
studentinfo['zhangqiang']={'age':25,'name':'ZhangQiang','score':{'chinese':75,'math':82,'english':78}}
studentinfo
{'liming': {'age': 25, 'score': {'math': 75, 'chinese': 80, 'english': 85}, 'name': 'LiMing'}, 'zhangqiang': {'age': 25, 'score': {'math': 82, 'chinese': 75, 'english': 78}, 'name': 'ZhangQiang'}}


#2 给学生添加一门python课程成绩,李明60分,张强:80分
studentinfo['liming']['score']['python']=60
studentinfo['liming']
{'age': 25, 'score': {'python': 60, 'math': 75, 'chinese': 80, 'english': 85}, 'name': 'LiMing'}
studentinfo['zhangqiang']['score']['python']=80
studentinfo['zhangqiang']
{'age': 25, 'score': {'python': 80, 'math': 82, 'chinese': 75, 'english': 78}, 'name': 'ZhangQiang'}




#3 把张强的数学成绩由82分改成89分
studentinfo['zhangqiang']['score']['math']=89
studentinfo['zhangqiang']
{'age': 25, 'score': {'python': 80, 'math': 89, 'chinese': 75, 'english': 78}, 'name': 'ZhangQiang'}




#4 删除李明的年龄数据
del studentinfo['liming']['age']
studentinfo
{'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'}}




#5 对张强同学的课程分数按照从低到高排序输出。
b=studentinfo['zhangqiang']['score'].values()
b
[80, 89, 75, 78]
b.sort()
b
[75, 78, 80, 89]


#6 外部删除学生所在的城市属性,不存在返回字符串 beijing
studentinfo.pop('city','beijing')   #若存在键名'city'  返回其属性  否则返回'beijing'
'beijing'


#第二部分
第二部分:


一.已经字符串 s = "i,am,lilei",请用两种办法取出之间的“am”字符。
s="i,am,lilei"
s[2:4]              #字符串切片
'am'
s.split(',')[1] 
'am'
更多关于split函数:http://blog.csdn.net/holyang_1013197377/article/details/49205065


二.在python中,如何修改字符串?
s="i love php"
s.replace('php','python')
'i love python'


三.bool("2012" == 2012) 的结果是什么。
bool("2012"==2012)
False




四.已知如下变量
________
a = "字符串拼接1"
b = "字符串拼接2"
________


1.请用四种以上的方式将a与b拼接成字符串c。并指出每一种方法的优劣。
a="string1"
b="string2"
c1=a+b  #1不适合大量字符串拼接


c2="%s%s" % (a,b) #2受顺序限制


print 'format'
c3="{a}{b}" . format(a=a,b=b) #3 未受顺序限制


c4="".join([a,b])  #4 只要申请一次内存
print c4


2.请计算出新拼接出来的字符串长度,并取出其中的第七个字符。
lennum=len(c1.encode('utf-8'))
print c1.encode('utf-8')[6].encode('utf-8')


五.请阅读string模块,并且,根据string模块的内置方法输出如下几题的答案。


1.包含0-9的数字。
print string.digits
0123456789


2.所有小写字母。
print string.lowercase
abcdefghijklmnopqrstuvwxyz


3.所有标点符号。
print string.punctuation
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~


4.所有大写字母和小写字母。
print string.ascii_uppercase
ABCDEFGHIJKLMNOPQRSTUVWXYZ
print string.lowercase
abcdefghijklmnopqrstuvwxyz


5.请使用你认为最好的办法将{1}-{4}点中的字符串拼接成一个字符串。
string.digits+string.lowercase+string.uppercase+string.punctuation
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'


strinfo = []
strinfo.append(string.digits)
strinfo.append(string.lowercase)
strinfo.append(string.punctuation)
strinfo.append(string.ascii_lowercase)
strinfo.append(string.ascii_uppercase)
print "".join(strinfo)
print '\n'


strinfo = "%s%s%s%s%s" % (string.digits,string.lowercase,string.punctuation,string.ascii_lowercase,string.ascii_uppercase)
print strinfo


九.已知字符串
________


a = "i,am,a,boy,in,china"
________


1.假设boy和china是随时可能变换的,例boy可能改成girl或者gay,而china可能会改成别的国家,你会如何将上面的字符串,变为可配置的。
exp1="i,am,a,%(sex)s,in,%(country)s" % {'sex':'boy','country':'China'}
print exp1
i,am,a,boy,in,China
exp2="i,am,a,{sex},in,{country}".format (sex='girl',country='USA')
print exp2
i,am,a,girl,in,USA


2.请使用2种办法取出其间的字符"boy"和"china"。
print exp1[7:10]
boy
print exp1.split(',')[3]
boy
print exp1[-5:]
China
print exp1.split(',')[-1]
China


3.请找出第一个"i"出现的位置。
exp1.index('i')
0
exp1.find('i')
0


4.请找出"china"中的"i"字符在字符串a中的位置。
print exp1.find('i',exp1.find('China'))
16
print exp1.rfind('i')       #找第二个'i'字符
16


5.请计算该字符串一共有几个逗号。
print exp1.count(',')
5


十.请将模块string的帮助文档保存为一个文件。
import sys
import string


f=open('string_help.log','w')
sys.stdout=f
help(string)
f.close()






 
#第三部分


1. 已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下
1.1 请将a字符串的大写改为小写,小写改为大写。
print a.upper()
print a.lower()


1.2 请将a字符串的数字取出,并输出成一个新的字符串。
print ''.join([s for s in a if s.isdigit()])
#解释
[s      for s in a if s.isdigit()]
l=[]
for s in a:
    if s.isdigit():
        l.append(s)
print l


1.3 请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 print a.count('a')
print dict([(x,a.count(x)) for x in set(a)])#set去重


1.4 请去除a字符串多次出现的字母,仅留最先出现的一个。例 'abcabb',经过去除后,输出 'abc'
a_list=list(a)
#print set(a_list)   #set 去重  无序  字典和集合不可排序
set_list=list(set(a_list)) #去重以后转化为list
set_list.sort(key=a_list.index)#对去重后按照list原来排序
print ''.join(set_list)    #拼接成字符串


1.5 请将a字符串反转并输出。例:'abc'的反转是'cba'
print a[::-1]


1.6 去除a字符串内的数字后,请将该字符串里的单词重新排序(a-z),并且重新输出一个排序后的字符 串。(保留大小写,a与A的顺序关系为:A在a前面。例:AaBb)


1.要有小写字母a-z的排序
2.大小写相同的大写在前面


l=sorted(a)
#print l  sort排序结果:字母数字分开排序
a_upper_list=[]     #声明大写list
a_lower_list=[]     #声明小写list
for x in l:         #遍历排序过的list 将大小写分别存在两个list中
    if x.isupper():
        a_upper_list.append(x)
    elif x.islower():
        a_lower_list.append(x)
    else:
        pass


for y in a_upper_list: #遍历大写list 
    y_lower=y.lower()
    if y_lower in a_lower_list:
        a_lower_list.insert(a_lower_list.index(y_lower),y) #把大写list中的字母插入到 原来这个位置是该字母小写的位置 不覆盖  顺延 index定位
#print a_lower_list
print ''.join(a_lower_list)  #拼接成字符串输出




1.7 请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输 出False.
search='boy'
b=set(a)
b.update(search) #update特性  如果b中有的字符  search中的字符就插不进去
print len(set(a))==len(a)


1.8 要求如1.7,此时的单词判断,由'boy'改为四个,分别是 'boy','girl','bird','dirty',请判断如上这4个字符串里的每个字母,是否都出现在a字符串里。
search=['boy','girl','bird','dirty']
b=set(a)
print b
for i in search:
    b.update(i)
print len(set(a))==len(a)


1.9 输出a字符串出现频率最高的字母
#set 去重
l=([(x,a.count(x))for x in set(a)])
l.sort(key=lambda k:k[1],reverse=True) #两次排序 :指定排序 第一个键  reverse从大向小排序
print l[0]
print l


2.一文件的字节数为 102324123499123,请计算该文件按照kb与mb计算得到的大小。
size=102324123499123
print '%s kb' % (size>>10)
print '%s mb' % (size>>20)


3.已知  a =  [1,2,3,6,8,9,10,14,17],请将该list转换为字符串,例如 '123689101417'.
a =  [1,2,3,6,8,9,10,14,17]
print str(a)[1:-1].replace(', ','')

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数据结构与算法分析是一个专栏,主要记录了如何使用Python学习数据结构与算法的笔记练习题。这个专栏包括了Python的内置数据结构和扩展数据结构Python给我们提供了很多现成的数据结构类型,如列表、元组、字典等,这些是系统预先定义好的数据结构。而还有一些数据组织方式需要我们自己去定义和实现,比如栈、队列等,这些被称为Python的扩展数据结构。通过学习这些数据结构和算法分析,可以更好地理解和应用Python编程语言。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【Python数据结构与算法】(一)基本概念和算法分析](https://blog.csdn.net/weixin_45052363/article/details/125099029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python 数据结构与算法详解](https://blog.csdn.net/qq_35029061/article/details/127561227)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值