我有一个名为chromosome
的列表,其中包含40个条目。每个条目都是二进制数。例如,
chromosome = [1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]
我需要将每个四个二进制文件转换为整数。例如,整数列表将是
intlist = [12, 6 ... ]
自1100b = 12
以来等等。
为了解决这个问题,我编写了以下Python函数
def makeChromosomeInteger(chromosome, chrom_size):
intstring = [0] * 10
i = 0
for j in range(0, 40, 4):
intstring[i] = str(chromosome[j]) + str(chromosome[j+1]) + str(chromosome[j+2]) + str(chromosome[j+3])
intstring[i] = int(intstring[i],2)
i = i+1
return intstring
这在大多数情况下都有效 - 该函数确实将每个四个二进制文件转换为整数。但是,迟早我会收到以下错误消息:
builtins.TypeError: 'int' object is not subscriptable
问题似乎是intstring[i] = int(intstring[i],2)
。我真的不知道为什么会这样。 intstring
和chromosome
都不是整数,为什么我不能对这些列表进行处理?
提前致谢!
P.S。:如果有任何其他聪明的方法来转换这些条目,我愿意接受建议:)
答案 0 :(得分:1)
您的代码应该有效,但这是一个简化:
chromosome = [1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
1, 0, 0, 1, 0, 0, 1, 1]
def makeIntList(chrom):
intlist = []
for j in range(0, len(chrom), 4):
intlist.append(chrom[j]*8 + chrom[j+1]*4 + chrom[j+2]*2 + chrom[j+3])
return intlist
intlist = makeIntList(chromosome)
print(intlist)
答案 1 :(得分:1)
尝试使用以下内容代替您的代码:
cs = [str(i) for i in chromosome] # Convert to strings
grp = [cs[i:i+4] for i in range(0,len(cs),4)] # Group into fours
ints = [int(''.join(g),2) for g in grp] # concatenate and convert as base 2.
您的样本结果为[12, 6, 14, 0, 7, 8, 5, 0, 9, 3]
。