《Python编程快速上手——让繁琐的工作自动化》读书笔记4
其实,写这个是为了督促自己看书……然后 ……其实没有然后了,人一松懈下来,就……ε=(´ο`*)))唉
第五章 字典和结构化数据
①字典数据类型
像列表一样,“字典”是许多值的集合。但不像列表的下标,字典的索引可以使用许多不同数据类型,不止是整数。字典的索引被称为“键”,键及其关联的值被称为“键-值”对。
在代码中,字典输入时带花括号{}。在交互环境中输入一下代码:
>>>myCat={'size':'fat','color':gray',disposition':'loud'}
这将给字典赋给myCat变量。这个字典的键是'size'、'color'、'disposition'。这些键相应的值是'fat'、'gray'和‘loud'。可以通过他们的键访问这些值:
>>>myCat['size']
'fat'
>>'My cat has '+myCat['color']+' fur.'
'My cat has gray fur.'
字典仍然可以用整数值作为键,就像列表用整数值作为下标一样,但是不要求一定要从0开始,可以是任何数字。
——摘自书81~82页
------------------------那个……再歪个楼-----------------------
昨天在做这题的时候:
发现,真的很多东西,乍一看很好解决,真到自己写的时候,就……
比如,怎么去掉字符串中间的空格,怎么把大写字母转换为小写字母,怎么统计字母出现的次数……种种难题,使我到现在都没把这题A掉,超级蓝瘦(T ^ T)。
不过是真的觉得PY真是黑科技,一行代码可以实现好多功能。
……
又跑题了,对,是要记录一下,这些功能怎么实现。
Ⅰ
首先,去掉字符串中间的空格。
string=' soft kitty warm kitty little ball of fur~~ happy kitty sleepy kitty pur pur pur~~ '
先是字符串↑,我们发现,字符串左右两边都有空格
⑴去掉左边的空格——lstrip
string=' soft kitty warm kitty little ball of fur~~ happy kitty sleepy kitty pur pur pur~~ '
string.lstrip()
print(string)
输出:
soft kitty warm kitty little ball of fur~~ happy kitty sleepy kitty pur pur pur~~ #右边一直到这里哦
⑵去掉右边的空格——rstrip
与上面的用法相同:字符串名.函数名()#string.rstrip()
⑶去掉左右两边的空格——strip
与上面的用法相同:字符串名.函数名()#string.strip()
![](/assets/blank.gif)
⑷去掉中间的空格
法一:split()
split():通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
string=' soft kitty warm kitty little ball of fur~~ happy kitty sleepy kitty pur pur pur~~ '
print(string.split())
output:
['soft', 'kitty', 'warm', 'kitty', 'little', 'ball', 'of', 'fur~~', 'happy', 'kitty', 'sleepy', 'kitty', 'pur', 'pur', 'pur~~']
当然,还可以自定义操作,见点击打开链接
In[3]: a = 'dfdfd*dfjdf**fdjfd*22*'
In[4]: a
Out[4]: 'dfdfd*dfjdf**fdjfd*22*'
In[5]: a.split('*')
Out[5]: ['dfdfd', 'dfjdf', '', 'fdjfd', '22', '']
In[6]: a.split('*',2)
Out[6]: ['dfdfd', 'dfjdf', '*fdjfd*22*']
法二:replace
>>> a = 'hello world'>>> a.replace(' ', '')
'helloworld'
法三:使用正则表达式
>>> import re
>>> strinfo = re.compile()>>> strinfo = re.compile(' ')>>> b = strinfo.sub('', a)
>>> print(b)
helloworld
法四:先转换成列表……在列表中删除……
法五:循环删除……
哭唧唧,那么多方法,最后还是A不了题
Ⅱ
大小写转化
这个简单,见百度知道……点击打开链接
可以直接通过str类的swapcase方法可以快速实现大写便小写、小写变大写的功能。In [1]:s='Baidu Zhidao'
In [2]:s.swapcase()
Out[2]:'bAIDU zHIDAO'
与swapcase类似的还有lower和upper方法,它们分别实现将字符串全部变为小写和全部变为大写的功能。In [3]: s.upper()
Out[3]:'BAIDU ZHIDAO'In [4]: s.lower()
Out[4]:'baidu zhidao'
Ⅲ
统计字母出现次数(终于讲到字典了,✿✿ヽ(°▽°)ノ✿)
先说单个字母,就是只统计一个字母的那种
string=input()
s=string.lower()
emm=list(s.replace(' ',''))
emm.sort()
print(emm)
num=emm.count(emm[0])
print(emm[0],num)
↑这个是昨天写的代码的修改版,当然,还是不对,就是展示一下count函数的
>>> '1,2,3'.count(',')<br />
2<br />
>>> 'Hello world'.count('l')<br />
3<br />
酱紫,就可以了。大家看,那个,即使已经是列表了,也是可以用的。
然后是统计很多字符:
from collections import Counterstring=input()
s=string.lower()
emm=list(s.replace(' ',''))
print (Counter(emm).most_common(4))
>>> string = 'hello world'
>>> { a:string.count(a) for a in set(string.replace(' ','')) }
{'h': 1, 'e': 1, 'w': 1, 'l': 3, 'o': 2, 'd': 1, 'r': 1}
用的是字典推导式和str自带的统计方法str.count作者:匿名用户
链接:https://www.zhihu.com/question/67528074/answer/254847319
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
点击打开链接
Ⅳ
判断是字母还数字
str_1 = "123"
str_2 = "Abc"
str_3 = "123Abc"#用isdigit函数判断是否数字
print(str_1.isdigit())
Ture
print(str_2.isdigit())
False
print(str_3.isdigit())
False#用isalpha判断是否字母
print(str_1.isalpha())
False
print(str_2.isalpha())
Ture
print(str_3.isalpha())
False#isalnum判断是否数字和字母的组合
print(str_1.isalpha())
False
print(str_2.isalpha())
False
print(str_1.isalpha())
Ture
----------------------------------楼好像歪了不少----------------------------
#希望大家还能记得是在第五章,要继续讲一讲字典……
#刚刚翻了一下书,还有好多啊,好绝望,不想写了,但是已经立了flag了,哭唧唧
spam=['cat', 'dogs', 'moose']
bacon=['dogs', 'moose', 'cat']
print(spam==bacon)#output:False
eggs={'name': 'Zophie','species': 'cat','age': '8'}
ham={'species': 'cat','age': '8','name': 'Zophie'}
print(eggs==ham)#output:True
列表和字典的区别还是很明显的,就像数列和集合的区别一样,列表中一个个元素不仅有自己的值还有特定的位置,而字典就像集合,只要在里面就万事大吉。--》字典是不排序的,列表是排序的。
尝试访问不在字典中的键('age'),将导致KeyError报错。
eggs={'name': 'Zophie','species': 'cat'}
print(eggs['age'])
报错信息
Traceback (most recent call last):
File "/usercode/file.py", line 29, in <module>
print(eggs['age'])
KeyError: 'age'
字典又是一个很万精油的东西,不挑,任意值都可以作为键,比如书上举例如何将好友的生日作为值,名字作为键。
birthdays={'Alice':'Apr 1','Bob':'Dec 12','Carol':'Mar 4'}
while True:print('Enter a name :(blank to quit)')name=input()if name==' ':breakif name in birthdays:print(birthdays[name]+' is the birthday of '+name)else:print('I do not have birthday information for '+name)print('What is their birthday?')bday=input()birthdays[name]=bdayprint('Birthday database updated.')
当然,这里的数据在程序终止之后,都会丢失,具体如何保存,将在以后的笔记中提到(其实是还没看到那部分)
②keys()、values()和items()方法
有3个字典方法,他们将返回类似列表的值,分别对应字典是键、值和键-值对:keys()、values()和items()。
但是
这些方法返回的不是真正的列表,他们不能被修改,不能应用append()方法。
不过,
这些数据类型(dict_keys、dict_values和dict_items)可以用于for循环。
比如:
spam={'color':'red','age':42}
for v in spam.values():print(v)
'''
output:
42
red
'''
这里for循环迭代了spam字典中的每个值。for循环也可以迭代每个键或者键值对:
spam={'color':'red','age':42}
for k in spam.keys():print(k)
'''
output:
color
age
'''
for i in spam.items():print(i)
'''
output:
('age', 42)
('color', 'red')
'''
items()方法返回的dict_items值中,包含的是键和值的元组,如果想得到真正的列表哦,就要吧类似列表的返回值传递给list()
#多重赋值
spam={'color':'red','age':42}
for k,v in spam.items():print('Keys: '+k+' Values: '+str(v))
output:
Keys: color Values: red
Keys: age Values: 42
--------再歪一个楼---------
据说本书提供源码来着
然后给了这个网址:
https://nostarch.com/automatestuff/
具体……我刚刚打开了,有一个
我估计八成是这个,然后就下载了
下载下来的是一个打开之后,看起来是源码
……
所以,我想说的是
……
那个,小程序的代码我就不放了
……
迅速逃走……
---------------------------------
③检查字典中是否存在键或值
法一:和列表方法类似:
键 in 字典名.keys()
值 in 字典名.values()
返回True或False
也可以采取简写形式,比如:
spam={'name':'Zophie','age':7}
'color' in spam.keys()与'color' in spam都会返回False
法二:get()方法
用于在访问某一个键的值之前,检查该键是否在字典里。
picnicItems={'apples':5,'cups':2}
print('I am bringing '+str(picnicItems.get('cups',0))+' cups.')
print('I am bringing '+str(picnicItems.get('eggs',0))+' eggs.')
'''
output:
I am bringing 2 cups.
I am bringing 0 eggs.
'''
如果不用get():
Traceback (most recent call last):
File "/usercode/file.py", line 2, in <module>
print('I am bringing '+str(picnicItems['eggs'])+' eggs.')
KeyError: 'eggs'
④setdefault()方法
D = {'Name': 'Runoob', 'Age': 7}print ("Age 键的值为 : %s" % D.setdefault('Age','25')) # 键存在在字典中则不会设置为指定值
print ("Sex 键的值为 : %s" % D.setdefault('Sex', 'NA')) # 键不存在,指定一个值
print ("School 键的值为 : %s" % D.setdefault('School')) # 键不存在,不指定值,默认为None
print ("新字典为:", D)
输出:
Age 键的值为 : 7
Sex 键的值为 : NA
School 键的值为 : None
新字典为: {'Name': 'Runoob', 'School': None, 'Sex': 'NA', 'Age': 7}
再比如:
'''
picnicItems={'apples':5,'cups':2}
if 'eggs' not in picnicItems:picnicItems['eggs']=2
print(picnicItems)
'''
"""
上面的内容完全可以写作:
"""
picnicItems={'apples':5,'cups':2}
picnicItems.setdefault('eggs',2)
print(picnicItems)
picnicItems={'apples':5,'cups':2}
picnicItems.setdefault('eggs',2)
picnicItems.setdefault('eggs',3)
print(picnicItems)#output:{'apples': 5, 'cups': 2, 'eggs': 2}
'''
即使在后面更改,其实也没有什么作用,这不禁让我想到了const关键字……
'''
⑤漂亮打印
本来不想再写这个的,但是,为终于可以打印正常字典打call……
方法:
在程序中导入pprint模块,就可以使用pprint()和pformat()函数。
--------------------再歪个楼--------------------
刚刚找到疑似资料
https://docs.python.org/2/library/pprint.html
-----------------------------------------------------
import pprint message='The amount of indentation added for each recursive level is specified by indent; the default is one. Other values can cause output to look a little odd, but can make nesting easier to spot. '
count={}for character in message:count.setdefault(character,0)count[character]=count[character]+1
pprint.pprint(count)
输出:
{' ': 34,
',': 1,
'.': 2,
';': 1,
'O': 1,
'T': 1,
'a': 12,
'b': 2,
'c': 6,
'd': 9,
'e': 22,
'f': 4,
'g': 1,
'h': 4,
'i': 11,
'k': 2,
'l': 7,
'm': 2,
'n': 11,
'o': 12,
'p': 3,
'r': 5,
's': 9,
't': 16,
'u': 8,
'v': 3,
'y': 1}
如果希望打印的是字符串,可以调用pprint.pformat()
print(pprint.pformat(count))
与
pprint.pprint(count)
等价
'''
好啦,就先到这里啦ヾ(◍°∇°◍)ノ゙
'''
----------------这里是更新的分割线---------------------
from collections import Counterstring=input()
newS=''
string= ''.join(string.split())
string.replace('.','')
for s in string:if s.isalpha():newS+=s
s=''
s=newS.lower()
emm=[]
emm=list(s)
emm.sort()
wa=[]
wa=(Counter(emm).most_common(1))
#print(wa)
#print (wa[0][0])
#print(wa[1][0])
#tup=tuple(wa)
#print(tup)
#for x in tup:
# print(x)
stri=''
stri=str(wa)
#print(stri)
print(stri[3],stri[7])
之前提过这道题,然后,这个代码……通过的概率……是不确定的……
绝对不是我的问题……
《Python编程快速上手——让繁琐的工作自动化》读书笔记4相关推荐
- mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...
MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...
- MongoDB权威指南读书笔记——CRUD
插入并保存文档 插入是向MongoDB中添加数据的基本方法.可以使用Insert方法向目标集合插入一个文档:db.foo.insert({"bar" : "baz&quo ...
- HTTP权威指南读书笔记
<<HTTP权威指南>>读书笔记 第一部分:Web的基础 第1章:HTTP概述 主要内容 1.什么是HTTP 2.HTTP的基本组件 HTTP HTTP:HTTP(Hypert ...
- HTML5权威指南----读书笔记
<!DOCTYPE html> <html> <head><meta name = 'keywords' content="HTML5权威指南--- ...
- 计算机网络和http权威指南 读书笔记
计算机网络笔记 网络层 网络层向上提供无连接的,尽最大努力交付的数据报服务 网络层不提供数据质量承诺 物理层使用的中间设备叫转发器repeater 数据链路层叫网桥bridge 网络层叫路由器rout ...
- MapReduce总结 + 相关Hadoop权威指南读书笔记(未完......欢迎补充,互相学习)
文章目录 MapReduce概述 MapReduce优缺点 MapReduce核心思想 MapReduce进程 MapReduce编程规范 WordCount 案例实操 本地测试 集群测试 Hadoo ...
- android开发读书笔记,android开发权威指南读书笔记
第17章 Fragment 1.在res目录下增加 layout-sw600dp 目录,用于存放7英寸及以上尺寸屏幕的布局文件.10英寸以上平板用 sw720dp.如果是更小的屏幕,如 480*800 ...
- java性能权威指南中文_Java性能权威指南读书笔记--之一
JIT(即时编译) 解释型代码:程序可移植,相同的代码在任何有适当解释器的机器上,都能运行,但是速度慢. 编译型代码:速度快,电视不同CPU平台的代码无法兼容. java则是使用java的编译器先将其 ...
- javascript权威指南读书笔记之二——词法结构
本章讲述的内容,用通俗的语言来说,就是应该注意的地方,这些也许和我们所学的其他语言类似,也许完全不同,比如一开始就介绍说javascript程序中的每个字符都是用两个字节表示的,但有些程序设计者习惯于 ...
- HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解
一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...
最新文章
- 180615-精度计算BigDecimal
- 洛谷 P4245 【模板】MTT
- 删除重复数据sql语句
- QT-在子控件上绘图的两种方式
- 小公司出来的产品经理被大厂鄙视?
- 宝藏世界显示连接不到服务器,宝藏世界新手常见问题解答 新手攻略
- [-1]是也乎,( ̄▽ ̄)
- 2014.7.7模拟赛【无线通讯网】
- 手机麦克风结构原理图_一文看懂咪头的工作原理及结构(驻极体话筒)
- 深入理解JVM虚拟机(总结篇)
- 搜索引擎是如何评估网页内容优劣的
- 什麼是雲端服務?阿正老師教你免費玩Amazon EC2雲端主機!(上篇)
- [HAOI2006]旅行comf(枚举+最小生成树)
- 趣头条递交招股书 将冲刺移动内容聚合第一股
- 前端面试题杂烩part1
- 外媒分析:为何说苹果一定没造车!
- 记录梦幻手游PC端辅助开发及设计思路之整体架构
- 华为鸿蒙os适配机型曝光,手机资讯导报:华为鸿蒙OS2.0首批适配机型曝光
- XML介绍与使用及简单注解
- 利用ip-subnet-vlan(基于ip子网划分vlan) 技术 实现一根网线多VLAN业务