python - 获取固定大小的子列表

标签 python python-3.x list sublist

标题不清楚,但这是我想做的。

我有一个基因组链:

corpus_2 = ['TCAATCAC', 'GGGGGGGGGGG', 'AAAA']

我想提取所有固定大小的子列表。假设我想要大小为 4 的子列表。

我查找的结果示例:['TCAA', 'CAAT', 'AATC', 'ATCA', 'TCAC'], ['GGGG', 'GGGG', 'GGGG', 'GGGG ', 'GGGG', 'GGGG', 'GGGG', 'GGGG'], ['AAAA']]

我们获取索引 0 到索引 3 的子列表,然后添加一个新字符串等...

这是我的代码:

ngram_size=4
corpus=['TCAA', 'CAAT', 'AATC', 'ATCA', 'TCAC'], ['GGGG', 'GGGG', 'GGGG', 'GGGG', 'GGGG', 'GGGG', 'GGGG', 'GGGG'], ['AAAA']]
decoliste=[] #list output
        listemp=[] # I add one list by one list, each of these list corresponds to a list in input list.
        for element in self.corpus:
#             print(element)
            decoliste.append(listemp)
            listemp=[]

            for i in range(len(element)):
                try:
                    if len(element[i:i+self.ngram_size])==self.ngram_size:

                        listemp.append((element[i:i+self.ngram_size]))
                except:
                    pass
        decoliste.append(listemp)

        del(decoliste[0])
        print(decoliste)

我想知道您是否可以给我一些提示,告诉我如何彻底改进这段代码(它真的很长,老师不会喜欢它)。

最佳答案

对于每个字符串,您可以遍历 0 和它的长度减去 ngram_size 加上 1 之间的所有索引,并获得从该索引开始的子字符串。使用列表理解将所有这些放在一起实际上使它非常优雅:

result = [[e[i:i + ngram_size] for i in range(len(e) + 1 - ngram_size)] for e in corpus_2]

关于python - 获取固定大小的子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64935376/

相关文章:

Python:将集合列表转换为集合

java - 为什么java.util中没有设置随机访问

python - 为什么这个程序中索引会越界?

python - 使用 CherryPY MethodDispatcher 的动态 URL

python - 我们如何使用Python/Pandas将数据推送到Azure SQL Server?

python - 如何在没有过滤器的情况下使用 tweepy

python - 不支持在python中使用pem文件加密json给出RSA key 格式

python - 在 python 中矢量化蒙特卡洛模拟

python - 如何动态添加项目到kivy中的 ScrollView

python - pandas2ri.ri2py_dataframe(r_dataframe) 返回 float 而不是 ISO-8601 (YYYY-MM-DD) 格式的日期