繁体   English   中英

如何在具有两个列表的列表理解中使用枚举?

[英]How to use enumerate in a list comprehension with two lists?

我刚开始使用列表理解,我正在努力解决它。 在这种情况下,我需要获取每次迭代的每个列表( sequence_0sequence_1 )的n个数。 我怎样才能做到这一点?

这个想法是在两个序列之间获得最长的相等核苷酸(基序)序列。 一旦找到一对,程序应该在序列的下一个核苷酸中继续,检查它们是否也相等,然后用它拉长基序。 最后的 output 应该是找到的所有基序的列表。 问题是,一旦找到一对,要在下一个核苷酸中继续,我需要两个序列中的 position 以继续程序。 index function 在这种情况下不起作用,这就是我需要枚举的原因。

另外,我不完全理解()之间的xy的原因,理解这一点也很好:)

只是为了解释一下,列表的内容是 DNA 序列,所以它基本上是这样的:

sequence_1 = ['A', 'T', 'C', 'A', 'C']
def find_shared_motif(arq):
    data = fastaread(arq)
    seqs = [list(sequence) for sequence in data.values()]
    motifs = [[]]
    i = 0
    sequence_0, sequence_1 = seqs[0], seqs[1]  # just to simplify

    for x, y in [(x, y) for x in zip(sequence_0[::], sequence_0[1::]) for y in zip(sequence_1[::], sequence_1[1::])]:
        print(f'Pairs {"".join(x)} and {"".join(y)} being analyzed...')
        if x == y:
            print(f'Pairs {"".join(x)} and {"".join(y)} match!')
            motifs[i].append(x[0]), motifs[i].append(x[1])
            k = sequence_0.index(x[0]) + 2  # NAO ESTA DEVOLVENDO O NUMERO CERTO
            u = sequence_1.index(y[0]) + 2
            print(k, u)

            # Determines if the rest of the sequence is compatible
            print(f'Starting to elongate the motif {x}...')
            for j, m in enumerate(sequence_1[u::]):
                try:
                    # Checks if the nucleotide is equal for both of the sequences
                    print(f'Analyzing the pair {sequence_0[k + j]}, {m}')
                    if m == sequence_0[k + j]:
                        motifs[i].append(m)
                        print(f'The pair {sequence_0[k + j]}, {m} is equal!')

                    # Stop in the first nonequal residue
                    else:
                        print(f'The pair {sequence_0[k + j]}, {m} is not equal.')
                        break

                except IndexError:
                    print('IndexError, end of the string')

        else:
            i += 1
            motifs.append([])

        return motifs
...

go 的一种方法是开始压缩两个列表:

a = ['A', 'T', 'C', 'A', 'C']
b = ['A', 'T', 'C', 'C', 'T']

c = zip(a,b)

在这种情况下, c将具有以下值

c = [('A','A'), ('T','T'), ('C','C'), ('A','C'), ('C','T')]

然后,很明显,您想要的是将第一个元素与元组与第二个元素进行比较。 但是,您还需要 position 存在差异。 因此,您可以使用enumerate go :

for i, t in enumerate(c):
    if c[0] != c[1]:
        return i
    return -1

这样,如果最后得到-1 ,则意味着两个列表中的所有元素都相等,并排。 否则,您将得到 position 的差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM