感谢yangyang师兄,无私授课,日常表白。
一直零零碎碎地在学python,各种基础知识看了忘,忘了看,有点无头绪。不过,这次作业题对python的兴致重燃,所以想要把自己在完成这个入门小作业的过程中遇到的问题和解决方法记下来,以后也好重温orz
一、字符串切片
格式:[start:end:step](start<end,正负都一样)
字符串左起位置索引为[0],右起为[-1](list、tuple同理)
思考1:对于索引位置和个数总是搞混,这里end所在位置是不会输出的,所以实际索引位置是[end-1]。
例题:
# coding:utf8
import re
str_ex = 'Python is an interesting and useful language for numerical computing!'
s = str_ex
match = re.findall(r'in',s)
print (s[:6]) #输出索引位置[0]到[5]对应的字符
print (s[-1:]) #最后一位
print (s[-10:-1]) #输出索引位置[-10]到[-2]对应的字符,从小到大!
print (s[::-1]) #反转字符串,list同理
print ([6:0:-1]) #直接提取反转
print (s[::2]) #每隔一个字符取一个,每隔step-1个字符取一个。如果是每隔一个字符取两个呢?
print (match[0]) #输出查找到的第一个in
思考2:使用正则查找特定两个字符(如in)
- 加上单词边界\b,如r'\bin\b',则结果为独立单词in(外in)。
- 不加单词边界\b,如r'in',则结果为单词中的组成字符in(内in),如查找到的会是interest中的in。
收获:
正则式语法的内容需要补,包括贪婪、非贪婪模式等。查找过程中关于字符串提取的零碎知识:
- 实际上一开始的想法是查找以i开头n结尾的字符串,即^i(.*?)n$,但是返回的是空值。
- 如果是提取字符串中的数字,可用正则r'\d+',也可用filter()函数。
- 一般默认贪婪匹配,如:
>>>re.match(r'^(\d+?)(0*)$','102300').groups()
('1023','00')
- 下图列出了Python支持的正则表达式元字符和语法:
二、list列表操作
- list1.pop(2) 删除list中索引位置为[2]的元素
- list1.remove(1.0) 删除list中特定元素1.0
- list1.append('a') 增加元素'a'
- list1 + list2 两列表连接
- list1.reverse() 反转列表
- list1.count('a') 统计a出现的次数
三、dict字典排序
使用sorted函数,对字典dict按value和按key排序
格式:sorted(iterable,key,reverse)
解释:其中iterable表示可以迭代的对象,可以是dict.items()、dict.keys()等;key是一个函数,用来选取参与比较的元素;reverse则是用来指定排序是倒序还是顺序,默认reverse=false(从小到大)。
例题:
# coding:utf8
import json
s = {'ada':57,'bella':62,'candy':35,'李小明':51,'dasiy':41,'ella':35}
#按value排序
svalue = sorted (s.items(),key =lambda item:item[1],reverse = True)[1]
result1 = json.dumps(svalue, encoding='UTF-8', ensure_ascii=False)
print result1 #(‘ada’,57)
#按key排序
skey = sorted(s.keys(),reverse = True)[-1]
result2 = json.dumps(skey, encoding='UTF-8', ensure_ascii=False)
print result2
- 按value排序:①s.items()是将s转换为可迭代对象,items()方法将字典元素转化为元组元素,迭代对象为('ada',57), ('bella',62),……,('ella',35)。②key函数这里对应lambda表达式,意思是选取各元祖元素中的第二个参数作为比较参数。表达式lambda x:y,x表示输入参数,y表示lambda函数中的返回值。上例key=lambda item:items[1]表示选取第二个参数作为比较参数,即选取value作为比较参数。③从高到低排列,reverse=true。*注意返回值是list,而列表中为元组元素()。
- 按key排序:①直接使用sorted(s.keys()),按照key值进行排序。②正常顺位读key就设置reverse=true。
以上内容参考:python的sorted函数对字典按key排序和按value排序,感谢!
收获:
对于字典中文输出出现乱码的问题,使用json模块。我以为原字典可以直接使用,后面就可以不用了。不过试了一下,好像每次输出都要写上。
json.dumps(dict1, encoding='UTF-8', ensure_ascii=False)
四、while循环
问题:控制循环,在出错的时候不仅提醒并且自动跳转到原输入行
关键点:break、flag的使用
例题:
# !/usr/bin/env python
# coding:utf8
#break用法
while 1:
ID = raw_input('please input your idcard:')
if len(ID)==18:
if int(ID[-2])%2==0:
print 'sex: women'
else:
print 'sex: man'
break
else:
print ('Data Input Error. Please try again.')
#continue
#flag用法
flag = true
while flag:
ID = raw_input('please input your idcard:')
if len(ID)==18:
if int(ID[-2])%2==0:
print 'sex: women'
else:
print 'sex: man'
flag = false
else:
print ('Data Input Error. Please try again.')
啊关于count的忘记记录,下次补,好爱困啊