字符串连接/索引给IndexError

时间:2018-06-25 18:14:29

标签: python

我正在尝试一些相对基本的字符串连接,但似乎找不到我收到的错误的根源。

我的代码如下:

def crossover(dna1, dna2):
    """
    Slices both dna1 and dna2 into two parts at a random index within their
    length and merges them.
    """
    pos = int(random.random()*DNA_SIZE)
    return (dna1[:pos]+dna2[pos:], dna2[:pos]+dna1[pos:])

稍后,我以以下方式引用此函数,其中变量ind1Affind2Aff先前已定义为二进制字符串

ind1Aff, ind2Aff = crossover(ind1Aff, ind2Aff)

但是,在运行我的代码时,我遇到以下错误

    return (dna1[:pos]+dna2[pos:], dna2[:pos]+dna1[pos:])
IndexError: invalid index to scalar variable.

我尝试将其略微更改为类似dna1[0:pos]+dna2[pos:DNA_SIZE](其中DNA_SIZE是字符串的长度)之类的东西,但没有成功。有些来源的问题与this类似,但似乎没有帮助。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

如评论中所述,似乎最可能的问题是您实际上并未传递字符串。在执行字符串拆分之前,尝试打印类型(即type(dna1))。

当您传递普通的python字符串时,您的代码将按预期工作:

import random


def crossover(dna1, dna2):
    """ 
    Slices both dna1 and dna2 into two parts at a random index within their
    length and merges them.
    """
    DNA_SIZE = len(dna1)
    pos = int(random.random()*DNA_SIZE)
    return (dna1[:pos]+dna2[pos:], dna2[:pos]+dna1[pos:])


def main():
    one = '000000000000000'
    two = '111111111111111'
    ind1Aff, ind2Aff = crossover(one, two)
    print ind1Aff
    print ind2Aff


if __name__ == "__main__":
    main()

输出:

000011111111111
111100000000000

在应用字符串拆分之前,您还可以抛出str(dna1)和str(dna2)。