2019独角兽企业重金招聘Python工程师标准>>>

0.    序列包括字符串、列表和元组三种类型

1.    序列

1.0  序列的每一个元素可以通过指定一个偏移量的方式得到,多个元素可以通过切片操作的方式一次得到。偏移量从0开始,到总元素数-1结束

1.1  标准类型操作符

标准类型操作符一般适用于所有的序列类型

1.2  序列类型操作符

1.2.1  成员关系操作符—in和not in

成员关系操作符用来判断一个元素是否属于一个序列,返回True/False:满足成员关系就返回True,否则返回False。

>>> "12" in "123456"
True
>>> "12" not in "13456"
True

1.2.2  连接操作符

连接操作符可以连接一个序列和另一个类型相同的序列。

>>> "123" + "456"
'123456'

需要注意:①连接、合并字符串,更有效的办法是把所有子字符串放到一个列表或可迭代对象中,再调用join方法;类似的,合并列表,更有效的办法是调用列表的extend()方法。

>>> str1 = 'abc'
>>> str2 = 'def'
>>> ' '.join((str1, str2))
'abc def'
abc def
>>> list1 = list(str1)
>>> list2 = list(str2)
>>> list1.extend(list2)
>>> list1
['a', 'b', 'c', 'd', 'e', 'f']

②当仅需要简单的合并两个对象的内容,或者连接那些没有返回值(返回None)的时候,连接操作符较为简便

1.2.3  重复操作符

重复操作符返回一个新的、包含多份原对象拷贝的对象,用于需要一个序列的多份拷贝时,如例:

>>> "12" * 3
"121212"
>>> [12,13] * 3
[12,13,12,13,12,13]

重复操作符连接的非列表对象必须是整型,不能是长整型

1.2.4  切片操作符

①用方括号[]加下标可以访问序列的每一个元素;方括号[]中用冒号:把开始下标和结束下标分开可以访问序列的一组元素,这种访问序列的方式就叫做切片

②访问单个元素

语法:sequence[index]

index可以是正数也可以是负数,区别在于正数从序列的开始为起点,负数从序列的结束为起点,故index为正数时范围是0<=index<=len(sequence)-1;负数范围是-len(sequence)<=index<=-1

sequence[len(sequence)-1] = sequence[-1]    sequence[0] = sequence[-len(sequence)]

③访问一组元素

当给出用冒号分割的开始和结束索引值时,可以访问一组元素。

语法:sequence[start_index:end_index]

起始索引和结束索引都是可选的,如果没有提供或者用None作为参数,则从序列的开始处开始,或者到序列的最后结束

1.2.5  切片扩展

序列切片的第三个可选操作是选择步长

语法  sequence[start_index:end_index:step]

如:

>>> a = [1,2,3,4,5,6]
>>> a[::-1]
[6,5,4,3,2,1]    #翻转操作
>>> a[::2]
[1,3,5]      #隔一个取一个

1.2.6  切片索引

切片索引语法灵活,即使开始和结束的索引值超过字符串的长度也没关系。

例子①  对一个字符串,通过循环每次把位于最后的一个字符砍掉,下面是一种实现方法

s = 'abcdefg'
i = -1
for i in range(-1,-len(s),-1):print s[:i]

②若需在第一次迭代时显示整个字符串,则可如下修改

s = 'abcdefg'
i = -1
for i in [None] + range(-1,-len(s),-1):print s[:i]

1.3  内建函数

1.3.1  类型转换

list()  把可迭代类型转换为列表:

>>> list("123456")
['1','2','3','4','5','6']

str()  把对象转换成字符串

>>> str(123)
'123'
>>> str([1,2,3])
'[1,2,3]'

str()在输出对象的可打印信息时很有用;

list()和tuple()函数在用于列表和元组的互换时很有用

转换类型函数说明:

1.3.2  可操作

Python为序列类型提供的内建可操作函数包括以下各种,其中len();  reversed();  sum()函数只能接受序列类型作为参数。剩下的可以作为可迭代对象作为参数。max()、min()函数还可以接受一个参数列表

2.字符串和操作符

2.1  标准类型操作符

字符串做比较操作时,字符串是按照ASCII码值比较的

2.2  序列操作符切片

①正向索引范围从0到len()-1;反向索引范围从-1到-len()

2.3  成员操作符 in / not in

①成员操作符用于判断一个字符和字符串是否出现在另一个字符串中,出现返回True,否则返回False

>>> 'ab' in 'abc'
True
>>> 'ab' in 'bcde'
False
>>> 'ab' not in 'abc'
False
>>> 'ab' not in 'bcde'
True

②string模块中预定义的方法

>>> import string
>>> string.uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'

标识符检查例子(idcheck.py)

import stringalphas = string.letters + '_'
nums = string.digitsprint "Welcome to the Identifier Checker v1.0"
print "Testees must be at least 2 chars long."
myInput = raw_input("Identifier to test? ")if len(myInput) < 2:print "Testees must be at least 2 chars long!"elif len(myInput) >= 2:if myInput[0] not in alphas:print '''invalid: first symbol must bealphabetic'''else:for otherChar in myInput[1:]:if otherChar not in alphas + nums:print '''invalid: remainingsymbol must be alphabetic'''breakelse:print "Okay as an identifier"

注①:这里用到了for-else结构。for遍历循环可以有可选的一个else分支语句,在循环迭代正常完成后执行,即除非以正常方式结束循环,否则其他任意方式(如break)退出循环时,else分支不会被执行。看下面的例子

>>> for i in range(5):
...     print i
... else:
...     print "This will print."
...
0
1
2
3
4
This will print
>>>
>>> for i in range(5):
...     if i >= 3:
...         break
...     print i
... else:
...     print "This will not print."
...
0
1
2
>>>

注②一般来说,从性能的角度来考虑,重复操作作为参数在循环体里面是很低效的 所以我们可以对例子里的某段代码做出修改

# 原代码
# for otherChar in myInput[1:]:
#     if otherChar not in alphas + nums:
#         pass# 修改后代码
alphasnums = alphas + numsfor otherChar in myInput[1:]:if otherChar not in alphasnums"pass

2.4  连接符 "+"

字符串的upper() lower() 方法

>>> Upp = 'ABC'
>>> Low = 'abc'
>>> Upp.lower()
'abc'
>>> Low.upper()
'ABC'

3.  只适用于字符串的操作符

3.1  格式化操作符(%)  格式化字符串

3.1.1  字符串格式化符号

A.字符串格式化的符号

B.格式化操作符辅助指令

Python支持两种格式的输入参数,一种是元组形式,一种是字典形式。

元组形式的例子:

>>> "%x" % 108
'6c'
>>> "%X" % 108
'6C'
>>> "%#X" % 108    # 八进制数前显示'0',十六进制前面显示'0x'或'0X'
'0X6C'
>>> "%#x" % 108    # x输出小写,X输出大写
'0x6c'
>>> '%f' % 1234.567890
'1234.567890'
>>> '%.2f' % 1234.567890    # 小数点后保留两位
'1234.57'
>>> '%08.2f' % 1234.567890  # 小数点后保留2位,且最小显示宽度为8,小数点算一位,不足8位用0补充
'01234.57'
>>> '%8.2f' % 1234.567890   # 小树点后保留2为,且最小宽度为8,小数点算一位,不足8位空格补充
' 1234.57'
>>> '%g' % 1234.567890
'1234.57'    # %g会根据值得大小选择%e或%f控制输出,且输出最多保留6位有效数字
>>> '%g' % 1.234567890
'1.23457'
>>> '%g' % 12345678.9
'1.23457e+07'
>>> '%e' % (111111111111L)
'1.111111e+11'

字典形式的例子:

>>> 'There are %(howmany)d %(lang)s Quotation Symbols' % {'lang': 'Python', 'howmany': 3}
'There are 3 Python Quotation Symbols'

3.2  字符串模版:更简单的替代品

新式的字符串Template对象可以替代字典形式的字符串格式化,有两个方法:substitute()和safe_substitute()。前者更加严谨,缺少key时报错;后者缺少对应的key则会原封不动的显示出来。

>>> from string import Template
>>> s = Template('There are ${howmany} ${long} Quotation Symbols')
>>>
>>> print s.substitute(lang='Python', howmany=3)
There are 3 Python Quotation Symbols
>>> print s.safe_substitute(lang='Python')
There are ${howmany} Python Quotation Symbols

3.3  原始字符串操作符

在字符串引号前加r或R,则对字符串中的转义字符默认不处理

>>> print '\n'>>> print r'\n'
\n

3.4  内建函数

3.4.1  序列类型函数

len()  max()  min()  enumerate()    zip()函数均适用于字符串

>>> str1 = 'abc'
>>> len(str1)
3
>>> str2 = 'lmn'
>>> str3 = 'xyz'
>>> max(str2)
'n'
>>> min(str3)
'x'
>>> s = 'Python'
>>> for i, t in enumerate(s):
...     print i, t
...
0 P
1 y
2 t
3 h
4 o
5 n
>>> s, t = 'Pyt', 'hon'
>>> zip(s,t)
[('P', 'h'), ('y', 'o'), ('t', 'n')]

3.5  字符串内建方法

字符串内建方法可参考下列表

下面是一些例子

>>> quest = 'what is your favorite color?'
>>> quest.capitalize()
'What is your favorite color?'
>>>
>>> quest.center(40)
'      What is your favorite color?      '
>>>
>>> quest.count('or')
2
>>>
>>> quest.endswith('or')
False
>>> quest.endswith('or?')
True
>>>
>>> quest.find('or')
16
>>> quest.find('ro')
-1
>>> quest.find('or',18)
25
>>>
>>> quest.index('or',0,18)
16
>>>
>>> alnum = 'abc123'
>>> notalnum = 'abc 123'
>>> alpha = 'abc'
>>> num = '123'
>>> num_hex = '017'
>>> num_oct = '0X17'
>>> alnum.isalnum()
True
>>> notalnum.isalnum()
False
>>> alpha.isalpha()
True
>>> alnum.isalpha()
False
>>> u'123'.isdecimal()
True
>>> u'0X17'.isdecimal()
False
>>> alpha.isdigit()
False
>>> num.isdigit()
True
>>> quest.islower()
True
>>> quest.capitalize().islower()
False
>>> quest.isspace()
False
>>> '  '.isspace()
True
>>> quest.istitle()
False
>>> quest.title().istitle()
True
>>> quest.isupper()
False
>>> quest.upper().isupper()
True
>>> ':'.join(quest.split())
'what:is:your:favorite:color?'
>>> quest.ljust(40)
'what is your favorite color?            '
>>> '   abc'.lstrip()
'abc'
>>> quest.partition('or')
('what is your fav', 'or', 'ite color?')
>>> quest.split('or')
['what is your fav', 'ite col', '?']
>>> quest.replace('or', 'OR')
'what is your favORite colOR?'
>>>
>>> quest.rjust(40)
'            what is your favorite color?'

3.6 字符串的独特特性

3.6.1  特殊字符串和控制字符

①一个反斜线"\"加一个单一字符可以表示一个特殊字符,通常是一个不可打印的字符,这就是转义的功能

②转义字符表

③单独的反斜线作为连字符,将本行和下一行的内容连接起来

>>> print "This a \
... sentence \
... and \
... this."
This is a sentence and this.

3.6.2  三引号

①Python的三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符

3.7  编码问题

3.7.1  raw_input在Windows系统的命令后模式下偶有中文提示语言乱码问题,原因在于Windows的CMD输出的编码问题,如下操作即可

>>> # -*- coding:utf-8 -*-
>>> print u'中文测试'
中文测试
>>> raw_input(u'中文测试'.encode('gbk'))
中文测试_

3.7.2  一个例子

'''
An example of reading and writing Unicode strings:Writes
a Unicode string to file in utf-8 and reads it back in.
'''
CODEC = 'utf-8'
FILE = 'Unicode.txt'hello_out = u"Hello world\n"
bytes_out = hello_out.encode(CODEC)
f = open(FILE, 'w')
f.write(bytes_out)
f.close()f = open(FILE, 'r')
bytes_in = f.read()
f.close()
hello_in = bytes_in.decode(CODEC)
print hello_in,

3.7.3  实际应用中的建议

①程序中出现字符串是在前面加前缀"u"

②用unicode()代替str()函数

③非必要时不要编解码Unicode字符。只有在写入文件/数据库/网络时才调用encode()函数;相应的,需要把数据读取回来时才使用decode()函数

④Python标准库里面大部分模块都支持Unicode,但pickle模块不支持,所以最好避免基于文本的pickle操作

⑤假设构建一个用数据库来读写Unicode数据的web应用,为了支持Unicode,必须确保以下方面对Unicode的支持:

A.数据库服务器(MySQL等)

B.数据库适配器

C.web开发框架

3.8  相关模块

下表列出了Python标准库里面与字符串有关的模块

3.9  列表

①更新列表可以通过在等号左边指定一个索引或一个索引范围,也可以通过append()方法

>>> a_list = [123, 456, 789, 'abc', 'def']
>>> a_list[2] = 'hhh'
>>> a_list
[123, 456, 'hhh', 'abc', 'def']
>>> a_list.append('I am the new')
>>> a_list
[123, 456, 'hhh', 'abc', 'def', 'I am the new']

②删除列表中的元素,可以用del语句和remove方法及pop方法,通过例子来看不同

>>> a_list
[123, 456, 'hhh', 'abc', 'def', 'I am the new']
>>> del a_list[2]
>>> a_list
[123, 456, 'abc', 'def', 'I am the new']
>>> a_list.remove(123)
>>> a_list
[456, 'abc', 'def', 'I am the new']
>>> a_list.pop()
>>> a_list
[456, 'abc', 'def']
>>> a_list.pop(1)
[456, 'def']

3.10  操作符和内建函数

3.10.1  标准类型操作符

标准类型操作符比较两个列表时,两个列表的每个元素分别比较,直到有一方的元素胜出为止。

3.10.2  列表类型操作符和列表解析

列表解析结合了列表的方括弧和for循环

>>> [i ** 3 for i in [8, -2, 5]]
[512, -8, 125]
>>> [i * 3 for i in 'abcde']
['aaa', 'bbb', 'ccc', 'ddd', 'eee']

3.10.3  cmp()函数比较

cmp()比较两个列表的算法如下:

①对两个列表的每个元素逐一进行比较

②如果比较的元素是同类型的,则比较其值并返回结果

③若不是同一类型,则检查他们是否是数字:

A。如果是数字,则进行必要的强制类型转换,然后比较

B。如果只有一方的元素是数字,则另一方的元素"大"(数字是"最小的")

C。否则,通过类型名字的字母顺序进行比较

④如果有一个列表首先达到末尾,则另一个长一点的元素大

⑤如果两个列表都达到末尾且所有元素都相等,则返回0即判定两个列表相等

3.10.4  序列类型函数

①len()函数返回列表或元组元素个数,每个对象都作为一项来处理

②max()和min()返回列表或元组各元素中最大或最小的项

③函数reversed()对列表或词典进行翻转;sorted()对列表排序

>>> s = ['They', 'stamp', 'them', 'when', "They're", 'small']
>>> for t in reversed(s):
...     print t,
...
small They're when them stamp They
>>> sorted(s)
['They', "They're", 'small', 'stamp', 'them', 'when']

④enumerate()和zip()

>>> albums = ['tales', 'robot', 'pyramid']
>>> for i, album in enumerate(albums):
...     print i, album
...
0 tales
1 robot
2 pyramid
>>> fn = ['ian', 'stuart', 'david']
>>> ln = ['bairnson', 'elliott', 'paton']
>>>
>>> for i, j in zip(fn, ln):
...     print ('%s %s' % (i, j)).title()
...
Ian Bairnson
Stuart Elliott
David Paton

⑤sum()

>>> a = [12, 3, 4]
>>> sum(a)
19
>>> sum(a, 1)
20
>>> import operator
>>> reduce(operator.mul, a)
144

注:reduce()是内建函数,接收的第一个参数是一个二元操作函数,接受的第二个参数是一个列表或元组,先对列表或元组中的第1和第2个元素利用给定函数进行操作,得到的结果再与第3个元素利用给定函数计算,最终得到一个结果。

3.11  列表的内建方法

3.11.1  列表内建方法表

下面是使用这些方法的例子

>>> music_media = [45]
>>> music_media
[45]
>>> music_media.append('long playing record')
>>> music_media
[45, 'long playing record']
>>> music_media.count(45)
1
>>> music_media.count('Hello')
0
>>> music_media.extend(['Hello'])
>>> music_media
[45, 'long playing record', 'Hello']
>>> music_media.index(45)
0
>>> music_media.index('H')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: 'H' is not in list
>>> music_media.insert(1, 46)
>>> music_media
[45, 46, 'long playing record', 'Hello']
>>> music_media.pop(1)
46
>>> music_media
[45, 'long playing record', 'Hello']
>>> music_media.remove(45)
>>> music_media
['long playing record', 'Hello']
>>> music_media.reverse()
>>> music_media
['Hello', 'long playing record']
>>> music_media.extend('Hello')
>>> music_media.sort()
>>> music_media
['H', 'Hello', 'e', 'l', 'l', 'long playing record', 'o']

转载于:https://my.oschina.net/u/2297516/blog/540622

python核心编程-第六章-个人笔记(一)相关推荐

  1. python核心编程-第六章-个人笔记(二)

    2019独角兽企业重金招聘Python工程师标准>>> 3.11.2  in操作符和index() 先看一段代码 >>> 'record' in music_med ...

  2. 【3】python核心编程 第六章-序列:字符串、列表和元组

    1.序列类型操作符 1 序列操作符 作用 2 seq[ind] 获得下标为ind 的元素 3 seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合 4 seq * expr 序列 ...

  3. python核心编程第六章练习6-12

    6-12. 字符串. (a)创建一个名字为findchr()的函数,函数声明如下. def findchr(string, char) findchr()要在字符串string中查找字符char,找到 ...

  4. Python计算机视觉编程第六章——图像聚类(K-means聚类,DBSCAN聚类,层次聚类,谱聚类,PCA主成分分析)

    Python计算机视觉编程 图像聚类 (一)K-means 聚类 1.1 SciPy 聚类包 1.2 图像聚类 1.1 在主成分上可视化图像 1.1 像素聚类 (二)层次聚类 (三)谱聚类 图像聚类 ...

  5. 趣学python编程第六章答案_Python核心编程-第六章-习题

    有.in操作符:find()方法和count()方法和index()均能实现 import string import keyword alphas = string.letters + '_' nu ...

  6. python程序操作的核心_python核心编程-第五章-个人笔记

    1.用del删除对对象的引用 >>> a = 123 >>>a123 >>> dela>>>a Traceback (most ...

  7. python第六章课后题答案_python 核心编程第六章课后题自己做的答案

    6–6. 字符串.创建一个 string.strip()的替代函数:接受一个字符串,去掉它前面和后面的 空格(如果使用 string.*strip()函数那本练习就没有意义了) 1 'Take a s ...

  8. python 核心编程 第十三章

    python面对对象 类和实例:类是对象的定义,实例是真真的实物. 创建一个类: class AddrBookEnttry(object):def __init__(self, nm, ph):sel ...

  9. Windows核心编程 第六章 线程基础知识 (下)

    6.6 线程的一些性质 到现在为止,讲述了如何实现线程函数和如何让系统创建线程以便执行该函数.本节将要介绍系统如何使这些操作获得成功. 图6 - 1显示了系统在创建线程和对线程进行初始化时必须做些什么 ...

最新文章

  1. CF724F Uniformly Branched Trees
  2. 网站推广中的优化雷区作为网站推广专员你了解多少?
  3. 超酷的实时颜色数据跟踪javascript类库 - Tracking.js
  4. 【转】删除过期数据通用程序
  5. jvav的 全局变量 和 局部变量
  6. c3p0 参数 模糊查询_Hibernate day03笔记
  7. Java之消息摘要(MD5)
  8. 常见移动机器人运动学模型总结(图片版)
  9. 【避坑】初次接项目的血与泪,扎坑了老铁(二)
  10. ANSYS Workbench网格划分具体数值方法
  11. 软件比较 - Sniffer、Omnipeek、科来网络分析系统过滤器比较之位过滤 在捕获数据包时,有时候需要对一个字节中的某一个位进行精确匹配,这时,我们就需要用到位过滤。位过滤相对于地址、端口、协
  12. PHP的消息队列详解
  13. u盘插电脑显示跟这台计算机,五大步骤解决U盘插入电脑盘符不显示问题
  14. 计算机科学导论任务书,计算机科学导论论文提纲格式范文 计算机科学导论论文提纲如何写...
  15. 最简单的Greenplum数据库的安装及配置步骤
  16. 如何看待985高校例如交大的材料专业的研究生找不到好工作?
  17. java输出美国的时间_java显示当前美国洛杉矶时间
  18. JavaScript用Math.asin()求反正弦值
  19. Python游戏末日丧尸
  20. android翻盖手机双屏显示,使用双屏翻盖手机是一种怎样的体验?

热门文章

  1. HDU-1069-Monkey and Banana
  2. AI最优论文+代码查找神器:966个ML任务、8500+论文任你选
  3. 双击jar运行main主函数实现-fatJAR
  4. 只学一点点:我的技术学习策略
  5. [置顶] 贝叶斯分类(一)
  6. Spring3, Hibernate3.6与Proxool连接池配置
  7. linux下nginx+python+fastcgi部署总结(web.py版)
  8. vs2019怎么调整字体大小_考研倒计时23天,答题卡怎么使用?来看看正确的使用方法吧!...
  9. 【转载】linux服务器下非root权限安装anaconda
  10. java基础-容器-Set