在多行上输出,我需要将每一行分配给它自己的变量

Outputting on multiple lines and I need each line to be assigned to its own variable

下面的代码采用 dna_string2 并在 dna_string1 中匹配它。然后它输出一个或多个匹配项的索引位置,然后将 return 值递增 1 以模拟“自我计数”。我面临的问题是我需要将 2、4 和 10 的输出值分配给它们自己的变量。我无法弄清楚如何分离输出以便我可以分配给各个变量。我试过使用 split()。我试过先写入文件。我觉得我已经尝试了几乎所有方法来分离输出。非常感谢任何专家的帮助。

定义函数

def get_most_likely_ancestor(dna_string1, dna_string2):
    i = 0
    g = len(dna_string2)
    for i in range (len(dna_string1)):
        i += 1
        g += 1
        if (dna_string1[i:g]) == (dna_string2):
            locations = dna_string1.index(dna_string2, i)
            locations += 1
            return locations

函数输入

dna_string1 = "GATATATGCATATACTT"

dna_string2 = "ATAT"

函数输出(如图所示)

2

4

10

如果您知道函数 return 有多少个值,您可以将每个值分配给一个单独的变量。

first, second, third = get_most_likely_ancestor(dna_string1, dna_string2)

赋值的 right-hand 端需要是一个序列,可以将其解压缩为 left-hand 端的表达式数量。

如果您无法预测该函数将 return 取多少值,它是大自然告诉您这是个坏主意的多种方式之一。实际上,将所有值都放在一个列表变量中会更好(或者,根据您的用例,可能是字典或更复杂的数据结构,可能封装在 class 中)。

函数需要更加灵活以允许任意数量的匹配。

函数不应负责结果的呈现。

因此,让我们只 return 一个列表并在调用者中处理演示文稿。例如:-

def get_most_likely_ancestor(s1, s2):
    offset = 0
    olist = []
    while (i := s1[offset:].find(s2)) >= 0:
        olist.append(offset := offset + i + 1)
    return olist

for pos in get_most_likely_ancestor('GATATATGCATATACTT', 'ATAT'):
    print(pos)

输出:

2
4
10

我想这对您的项目有帮助:

def get_most_likely_ancestor(dna_string1, dna_string2):
    i = 0
    g = len(dna_string2)
    global list_plain
    list_plain = []
    for i in range (len(dna_string1)):
        i += 1
        g += 1
        if (dna_string1[i:g]) == (dna_string2):
            locations = dna_string1.index(dna_string2, i)
            locations += 1
            list_plain.append(locations)
            
            


dna_string1 = "GATATATGCATATACTT"

dna_string2 = "ATAT"


get_most_likely_ancestor(dna_string1,dna_string2)
print(list_plain)

我同意@tripleee。对于更大或未知的数据,将它们封装在 class 中是一个更好的主意。