我正在尝试一些相对基本的字符串连接,但似乎找不到我收到的错误的根源。
我的代码如下:
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:])
稍后,我以以下方式引用此函数,其中变量ind1Aff
和ind2Aff
先前已定义为二进制字符串:
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类似,但似乎没有帮助。
我在做什么错了?
答案 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)。