您的位置:首页 > 编程语言 > Python开发

Python基础知识之认识字符串

2016-05-18 14:16 603 查看
Python有一个名为“STR”与许多方便的功能(有一个名为“串”,你不应该使用旧的模块),内置的字符串类。 字符串常量可以通过双或单引号括起来,尽管单引号更常用。 反斜杠工作单,双引号内的文字通常的方式 - “双引号字符串可以包含单引号没有任何大惊小怪(例如”如\ n \'\我没有做到这一点“),同样单引号字符串中可以包含双引号。字符串文字可以跨越多行,但必须在每一行的结尾是一个反斜杠\逃脱换行符。三重引号内的字符串常量“,”“”或''',可以多行文本。

Python编程语言的字符串是“不可改变的”,这意味着他们在创建后(Java字符串也使用了这种一成不变的风格),他们不能被改变。 因为字符串不能改变,我们构造*新的*字符串作为我们去代表计算的值。 因此,例如表达式('你好'+'还有')发生在2个字符串'你好'和'有',并建立一个新的字符串“hellothere”。

字符串中的字符可以使用标准[]语法来访问,而像Java和C ++,Python使用从零开始的索引,所以如果str为'你好'海峡[1]是“E”。 如果该指数超出范围的字符串,Python会引发一个错误。 Python的风格(不像Perl的)是暂停,如果它不能告诉做什么,而不是仅仅做了一个默认值。 方便的“切片”的语法(下)还致力于从字符串中提取的字符串。 该LEN(串)函数返回字符串的长度。 按[]语法和LEN()函数实际上在任何序列类型的工作 - 字符串,列表等。Python中试图使其业务在不同类型的工作始终。 Python的新手疑难杂症:不使用“LEN”作为变量名,以避免阻塞了LEN()函数。 该“+”操作​​符可以连接两个字符串。 在低于变量没有预申报代码的通知 - 只是分配给他们去了。

s = 'hi'
print s[1] ## i
print len(s) ## 2
print s + ' there' ## hi there

不像Java中,“+”不会自动号码或其他类型转换为字符串形式。 该STR()函数转换值字符串形式,使他们能够与其他字符串相结合。

pi = 3.14
##text = 'The value of pi is ' + pi ## NO, does not work
text = 'The value of pi is ' + str(pi) ## yes

数字,该标准操作符,+ / *以通常的方式工作。 没有++运算符,但+ =, - =等方面的工作。 如果你想整数除法,这是最正确的使用2斜杠 - 例如,6 // 5为1(以前为3000蟒蛇,单/ INT是否与分工无论如何整数,但前进//是指示的首选方式要诠释师。)

“打印”操作员打印出一个或多个项目蟒后跟一个换行符(在项目结束后离开尾随逗号来抑制行)。 A“原始”字符串文字是由一个“R”开头,并传送所有字符没有反斜杠的特殊处理,因此R'X \ NX“计算长度-4串'X \ NX”。 A'U'字头让你写一个unicode字符串(Python有很多其他的Unicode支持的功能 - 请参见下面的文档)。

raw = r'this\t\n and that'
print raw ## this\t\n and that

multi = """It was the best of times.
It was the worst of times."""

字符串的方法

下面是一些最常见字符串方法。 一种方法是像一个功能,但它运行“开”的对象。 如果变量s是一个字符串,则代码s.lower()运行该字符串对象的降低()方法,并返回结果(这个想法在对象上运行的方法是基本思路构成对象的一种面向对象编程,OOP)。 下面是一些最常见字符串方法:

s.lower(),s.upper() - 返回字符串的大写或小写版本

s.strip() - 返回空白的字符串从起点和终点删除

s.isalpha()/ s.isdigit()/ s.isspace()... - 测试所有的串字符是在不同的字符类

s.startswith(“其他”),s.endswith(“其他”) - 测试字符串开始或结束与给定的另一个字符串

s.find(“其他”) - 搜索秒钟内给定的另一个字符串(不是正则表达式),并在那里开始或-1返回第一个索引,如果未找到

s.replace(“老”,“新”) - 返回,其中“旧”的所有匹配已经取代了“新”的字符串

s.split('DELIM') - 返回由给定的分隔符分隔字符串的列表。 分隔符不是一个正则表达式,它只是文字。 “AAA,BBB,ccc'.split(”,“) - > [”AAA“,”BBB“,”CCC“。 作为一种方便的特例s.split()(不带参数)分割上的所有空格字符。

s.join(名单) - 分割()相反,连接在一起使用字符串作为分隔符在给定列表中的元素。 如:“---”连接(['AAA','BBB','CCC']) - > AAA --- BBB CCC ---

谷歌搜索“蟒蛇海峡”应该带领您到官方python.org字符串方法 ,其中列出所有的海峡方法。

Python没有单独的字符类型。 相反,像S [8]表达式返回一个字符串长度1包含的字符。 以该字符串长度1,运营商==,<=,......所有的工作,你所期望的,所以大多是你不需要知道,Python没有单独标“char”类型。

串片

在“切片”语法是指序列的子部分的简便方法 - 通常是字符串和列表。 切片[起始:结束]开始是在启动和最多延长,但不包括结束的元素。 在假设我们有S =“你好”

S [1:4]是'ELL' - 开始于索引1和高达延伸但不包括索引4字符

S [1:]为'ELLO' - 无论是省略指数默认字符串的开始或结束

S [:]是“你好” - 忽略两者总是给我们的整个事情复印件(这是复制像一个字符串或列表序列中的Python的方式)

S [1:100]是'ELLO' - 这是太大的索引被截尾的字符串长度

标准的从零开始的索引号给字符串的开头附近容易获得字符。 作为替代方案,Python使用负数给予方便地前往字符的字符串的结尾:S [-1]是最后一个字符'O',S [-2]是'L'下一个到最后炭,等等。 负索引号从字符串的结尾计数回:

S [-1]为“O” - 最后一个字符(从1月底)

S [-4]是“E” - 从4月底

S [: - 3]是'他' - 往上走,但不包括最后3个字符。

S [-3:]是“LLO' - 开始从端第3炭和延伸到字符串的末尾。

这是片整齐的真理,任何指数n, s[:n] + s[n:] == s 。 这个工程即使是N负或出界。 或者换一种说法S [:n]和S [N:]字符串总是分割成两个串部分,保存的所有字符。 正如我们将列表中的部分在后面看到,洗净切片,用列表工作了。

字符串%

Python有一个printf() - 像工厂放在一起的字符串。 %运算符采取左侧(%d个INT%S字符串%F /%G浮点数)一个printf类型的格式字符串,并在右边的元组(匹配值的元组由被分隔的值逗号,通常在括号内分组):

# % operator
text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')

上面一行是那种长 - 假设你想打破它分成几行。 在“%”后,你不能只拆分行,你在其他语言中可能的,因为在默认情况下的Python对待每行作为一个单独的声明(在好的方面,这就是为什么我们不需要键入每个分号线)。 为了解决这个问题,请用外组括号整个表达式 - 则表达式允许跨越多行。 这款代号跨线技术也适用于各种分组构建详述如下:()[] {}。

# add parens to make the long-line work:
text = ("%d little pigs come out or I'll %s and %s and %s" %
(3, 'huff', 'puff', 'blow down'))

国际化的字符串(Unicode)的

常规的Python字符串*不* unicode的,他们只是简单的字节。 为了创建一个unicode字符串,请使用字符串中'u'前缀:

> ustring = u'A unicode \u018e string \xf1'
> ustring
u'A unicode \u018e string \xf1'

Unicode字符串是不同类型的,从常规的“STR”字符串对象,但Unicode字符串是兼容的(它们共享的公共超“即basestring”),如果通过一个unicode字符串,而不是不同库,如正则表达式正常工作一个普通的字符串。

Unicode字符串与编码转换为字节,如“UTF-8”,调用ustring.encode(“UTF-8”)的unicode字符串的方法。 去另一个方向,unicode的(S,编码)函数转换编码的纯字节Unicode字符串:

## (ustring from above contains a unicode string)
> s = ustring.encode('utf-8')
> s
'A unicode \xc6\x8e string \xc3\xb1' ## bytes of utf-8 encoding
> t = unicode(s, 'utf-8') ## Convert bytes back to a unicode string
> t == ustring ## It's the same as the original, yay!

True

内置打印不unicode字符串工作充分。 您可以编码()首先在UTF-8或任何打印。 在文件读取部分,有说明如何打开一个文本文件的一些编码和读取unicode字符串的例子。 需要注意的是unicode的处理是一个领域,Python的3​​000显著清理与此处描述的Python 2.x的行为。

如果声明Python不使用{}包围的代码块,如果/循环/功能等。相反,Python使用冒号(:)和缩进/空格将语句。 对于布尔测试,如果不需要在括号(从C ++ / Java的大的区别),它可以有* ELIF *和*其他*条款(记忆:单词“ELIF”是长度相同的单词“其他”)。

任何值可被用作一个如测试。 “零”的价值观都算为假:无,0,空字符串,空列表,空字典。 还有一个布尔类型包含两个值:true和false(转换为int,这些是1和0)。 Python有通常的比较运算:==,=,<,<=,>,> =! 不像Java和C,==超载与字符串正常工作。 布尔运算符是拼写出单词*和*,*或*,*不*(Python不使用C语言风格&& ||!)。 下面的代码可能看起来像一个警察拉过调速装置 - 请注意,然后/ else语句的每个块是如何与一个开始:和陈述是指压痕分组:

if speed >= 80:
print 'License and registration please'
if mood == 'terrible' or speed >= 100:
print 'You have the right to remain silent.'
elif mood == 'bad' or speed >= 90:
print "I'm going to have to write you a ticket."
write_ticket()
else:
print "Let's try to keep it under 80 ok?"

我发现,省略了“:”我是最常见的语法错误在上面的代码排序打字的时候,大概是因为这是一个额外的东西类型与我的C ++ / Java的习惯。 另外,不要把布尔测试中括号 - 这是一个C / Java的习惯。 如果代码是短暂的,你可以把代码后的同一行“:”像这样的(这适用于功能,循环等也),虽然有些人觉得这是更具可读性在单独的行空间的东西出来。

if speed >= 80: print 'You are so busted'
else: print 'Have a nice day'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: