错误"' int'对象不是可订阅的"虽然对象是一个列表

时间:2014-07-06 18:55:55

标签: python

我有一个名为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)。我真的不知道为什么会这样。 intstringchromosome都不是整数,为什么我不能对这些列表进行处理?

提前致谢!

P.S。:如果有任何其他聪明的方法来转换这些条目,我愿意接受建议:)

2 个答案:

答案 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]