Python-将带有大写和小写字符串元素的遗传数据(不带空格)拆分为列表

标签 python python-3.x

我正在处理过滤大量遗传数据。为了便于引用,我们将使用一串较短的元素,如下所示:

geneData = 'gggtacaccaaGGCCTATAACAttacatCTACATTGGAtcaggatccaaaATTAAGGAA'

我想将此字符串拆分为所有大写部分作为单词的列表(最终包含小写部分),所以这是我需要的输出:

cleanedExons = ['GGCCTATAACA', 'CTACATTGGA', 'ATTAAGGAA']

这与我过去从句子中拆分单词的方式类似,我一直在尝试调整代码以将字符串拆分为列表,但收效甚微。这是我当前的代码:

def Exon_Split(string):
    IntronLetters = 'gcat'
    L=string.split(IntronLetters)
    cleanedExons=[]
    ExonLetters = 'GCAT'

    for e in L:
        word = ''
        for c in e:
            if c in ExonLetters:
                word += c
        if word!=ExonLetters:
            cleanedExons.append(word)
    print(cleanedExons)
Exon_Split(geneData)

这是我得到的输出。正如您所看到的,它没有被分割成所需的元素:

['GGCCTATAACACTACATTGGAATTAAGGAA']

有没有办法让 python 将这些大写字母视为“单词”?

最佳答案

有问题吗?使用正则表达式:

import re

geneData = 'gggtacaccaaGGCCTATAACAttacatCTACATTGGAtcaggatccaaaATTAAGGAA'
pU = re.compile('[A-Z]+')
pL = re.compile('[a-z]+')
cleanedExons = pU.findall(geneData)
# repeat with PL

出于无聊,我做了一些性能测试:

# 10000000 iterations
# regex split: 40.23s
# regex findall: 26.53s
# the itertool version posted in another answer: 163.82s

所以 re.findall 是获胜者。 findall 的功劳归@Tomothy32,我发布的初始版本使用了 split

关于Python-将带有大写和小写字符串元素的遗传数据(不带空格)拆分为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964787/

相关文章:

python - 为什么 setattr 对属性和方法的作用不同?

python - 使用 Python 的 XML POST REST 请求

python - matplotlibs xticks 中的表情符号

Python 3.6.2 循环无法像我想要的那样工作

Python list.clear 复杂性

python - 如果在类型列表的单元格值中找到字符串,如何根据条件删除 pandas 数据框中的行?

python - gensim 的 word2vec 中的图层大小

python-3.x - 创建 os.DirEntry

list - 如果序列出现在列表中则返回 True

Python:为什么 np.where 不适用于两个条件?