将列表放入每个新行的列表中

时间:2015-02-23 06:56:46

标签: python list slice bioinformatics nested-lists

我正在尝试为每组kmers创建一个新列表(在列表中)

例如它应该返回:

[['ATT', 'TTT', 'TTG', 'TGG', 'GGC'], ['TGC', 'GCC', 'CCT', 'CTT', 'TTA'], ['CGG', 'GGT', 'GTA', 'TAT', 'ATC'], ['GAA', 'AAA', 'AAA', 'AAT', 'ATT']]

而不是:

['ATT', 'TTT', 'TTG', 'TGG', 'GGC', 'TGC', 'GCC', 'CCT', 'CTT', 'TTA', 'CGG', 'GGT', 'GTA', 'TAT', 'ATC', 'GAA', 'AAA', 'AAA', 'AAT', 'ATT']

我的代码

  # data = ['ATTTGGC', 'TGCCTTA', 'CGGTATC', 'GAAAATT']
    kmers = []
    def findKmersSet(k, stuff):
        i=0
        for line in data:
            for i in range(0,int(len(line)-k+1)):
                kmers.append(line[i:i+k])
    findKmersSet(3, data)

2 个答案:

答案 0 :(得分:1)

然后为每一行创建一个列表:

kmers = []
def findKmersSet(k, stuff):
    for line in data:
        line_list = []
        for i in range(0,int(len(line)-k+1)):
            line_list.append(line[i:i+k])
        kmers.append(line_list)

findKmersSet(3, data)

答案 1 :(得分:1)

这应该可以解决问题 - 重点是为每个初始字符串创建一个新列表并将其附加到总结果列表中:

data = ['ATTTGGC', 'TGCCTTA', 'CGGTATC', 'GAAAATT']

def findKmersSet(k, stuff):
    result = []
    for inner_list in stuff:
        iterators = [iter(inner_list[i:]) for i in xrange(k)]
        result.append([''.join(triple) for triple in zip(*iterators)])

    return result


findKmersSet(3, data)
# [['ATT', 'TTT', 'TTG', 'TGG', 'GGC'], ['TGC', 'GCC', 'CCT', 'CTT', TTA'], ['CGG', 'GGT', 'GTA', 'TAT', 'ATC'], ['GAA', 'AAA', 'AAA', 'AAT', 'ATT']]