字符串
基本的字符串功能
字符串是大多数现代语言中的内置数据类型,并配备了许多有用的操作。使用字符串数据的常见任务要求我们分析并重新组合它们,并在其中找到模式。模式发现在字符串中可以很快变得复杂,而更强大的字符串匹配技术则归为正则表达式篇文章。下面,我们将探索一些可以用字符串执行的基本操作。
特征提取
字符串中的每个字符都有一个很好的地址,称为索引,可以用来检索它。通常的惯例是字符串中的第一个字符(从左边开始)的索引为0,下一个字符的索引为1,以此类推。在许多语言中,字符串也可以从右侧索引,使用负数计数。最后一个位置(还是从左边开始计数)被赋值为-1,最右边的第二个字符被索引为-2,以此类推,直到到达字符串的开头。显然,字符串的最大下标是它的长度减1。类似地,它的最低下标是减去长度,即第一个元素的下标。
例如,在字符串中
“Merriweather”
的米
有索引0
从左到右-12年
从右边。一个例子胜过许多单词,让我们看看在Python中字符提取是如何工作的。
1 2 3 4>年代=“六边形abcdef”>打印年代[4]#打印索引为4的字符。“e”
子字符串提取
如果知道子字符串的起始和结束索引,则可以使用索引从字符串中提取子字符串。
1 2 3 4>年代=“六边形abcdef”>打印年代[1:4]“bcd”
重要的是要注意,生成的子字符串在上索引之前结束一个索引。
特征提取
可以同时使用正索引和负索引方案。
1 2 3 4 5 6>年代=“六边形abcdef”>打印年代[-1]#打印最后一个字符。“f”>打印年代[2:-1]#打印从索引2到(但不包括)最后一个索引。“cde”
同样,重要的是要注意子字符串以范围结束之前的字符结束(在Python中,分割列表/字符串是[包含:排他],所以
:-1
会包含字符at index吗-2
但不是-1
).负索引的方便之处在于,为了从末尾获取字符,不需要知道字符串的长度。
一旦我们从字符串中提取了子字符串,通常就需要将片段重新组合成另一个字符串。大多数编程语言都包含一个用于连接两个字符串的操作符。
字符串连接
在Python中,可以用
+
操作符。
1 2 3 4 5 5>str1=‘好’>str2=“早晨”>str3=“越南!”>打印str1+' '+str2+' '+str3好早....越南!
子字符串
继续使用我们命名为“字符串”的有序字符组的想法,我们将学习更多关于它们的知识,以便能够用它们做更强大的事情,最终解决现实生活中的计算问题。
字符串的定义很简单,但这并不意味着它们的适用性有限。它们是基本的构建块,可用于构建更复杂的数据类型以解决问题。熟悉字符串操作是很重要的,因为许多应用程序都要求使用字符串并将它们重新塑造为对计算有用的形式。
下面是一些有用的基本字符串功能:
Python字符串的方法
除了能够获取子字符串使用
[start_inclusive: end_exclusive]
表示法中,可以提供第三个参数来添加“步长”大小,该步长将周期性地采样开始和结束索引之间的区域。默认情况下,子字符串方法的开始索引和结束索引为0
和len (str)
;因此,如果我们要求[:]
,则得到整个字符串。例如:
1 2 3 4 5 6 7 8 9 10 11>str=“abcdefghij”# # # # # # # # 0123456789>str[1:8:2]#步长为2的子字符串每秒打印一个字符。#只打印索引为1、3、5和7的字符。“bdfh”>str(::-2]# -2步长打印子字符串中的每2个字符,并计数从字符串的末尾向后开始。仅在索引处出现的字符# -1, -3 -5, -7, -9将被打印出来。“jhfdb”
很简单!
分裂
因为我们经常接收可变长度的字符串,所以索引并不总是有用的。数据存储的一种常见形式是使用通用分隔符(如逗号、空格、制表符、下划线等)分隔项。在任何分隔符方案中,用户必须同意不使用分隔字符串作为他们文件的信息部分,即分隔符只用于划分项目的边界,而不是项目本身。
由于这是常见的,大多数语言都提供了一种方法来在此类字符的位置上中断字符串。给定输入字符串和分隔符的标识,则分裂
方法将返回组件字符串。
Python字符串split()方法
假设你有一个包含如下形式的字符串的文件,表示各种基因产品:
行= " lacZ_1013aa_betagalactosidase_escherichiacoli "
第一串是基因的名字,第二串是它在氨基酸残基中的长度,第三串是它的酶产物,第四串是它的起源有机体。
写一个函数它会分解输入字符串并打印酶产物。
首先,我们可以使用
分裂
方法来打破行
直到四个字段,这将产生一个字符串数组。然后简单地输出第三个元素。
1 2 3 4defget_enzyme(ln):分裂=ln.分裂(“_”)enzyme_product=分裂[2]打印enzyme_product
因此
1 2 3>行=lacZ_1013aa_betagalactosidase_escherichiacoli>get_enzyme(行)“betagalactosidase”
翻译
字符串的另一个常见任务是进行字符替换,即替换字符x1, x2,…, xn
用另一种字母y1, y2,…, yn
.例如,假设我们有一个与基因X相对应的基因组(DNA)区域,它的产物是蛋白质X,我们想找到核糖体用来将信息转化为蛋白质的信使rna。
RNA聚合酶读取负链并将所有胞嘧啶替换为鸟嘌呤,反之亦然。所有胸腺嘧啶都被腺苷取代。并且,在所有RNA序列中,尿嘧啶基被用来代替胸腺嘧啶,腺苷被尿嘧啶取代。因此我们有
1 2 3 4 |
|
我们如何用字符串翻译将DNA序列转录成mRNA ?
RNA转录
我们可以使用方法
maketrans
从Python字符串模块中创建一个用于该翻译任务的罗塞塔石碑:
1 2>从字符串进口maketrans>罗塞塔=maketrans(“ATGC”,“UACG”)
有了翻译表,我们就可以用它把DNA序列转录成RNA。由于核酸序列的5' -> 3'极性,这将与我们的目标,mRNA序列相反:
1 2>DNA=“GCGTGAGTACACATGGTGCAT”>rev_mRNA=DNA.翻译(罗塞塔)
最后,为了得到mRNA序列,我们将结果反过来:
1 2>信使核糖核酸=rev_mRNA(::-1]“AUGCACCAUGUGUACUCACGC”
在最后一步中,我们使用了子字符串功能来获取整个字符串,索引反向运行。