如何在python中使用字符串和整数作为位字符串?

2024-10-01 07:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python开发一个遗传算法,因为染色体是由字符串和整数组成的。为了应用遗传操作,我想把这些整数和字符串组转换成位串。在

例如,如果一条染色体是:

["Hello", 4, "anotherString"]

我希望它变成这样:

^{pr2}$

(这不是实际的翻译)。所以。。。我该怎么做?染色体将包含相同数量的字符串和整数,但这些数字可能因算法的不同而有所不同。在

很明显,我想要得到的是连接的染色体中每个元素的位表示。在

如果你认为这不是应用遗传操作的最好方法(比如变异和简单的交叉),告诉我!我乐于接受新的想法。在

非常感谢! 曼纽尔


Tags: 方法字符串算法元素hello数量数字整数
3条回答

把所有的东西都转换成一个串联的字符串,而不是应用遗传操作似乎不是最好的主意。遗传操作可以破坏很多东西(特别是当你对个体有一些限制的时候),另外这种解决方案的有效性可能很低。我建议采用不同的方法。在

尝试使用超生基因概念(wiki)来实现个体。描述了将其应用于遗传算法的例子here。另外,根据this的说法,它提高了整体遗传算法的性能。
在我看来这会使设计更清楚。我会尝试这种方法。在

一旦您准确地描述了从字符串到位字符串的转换应该如何进行,“如何”应该相当容易。如果遗传算法应该在位级别上工作,那么显然位级字符串是有意义的,但是它可能比使用数字或字符串慢得多。在

您可以使用struct模块将字符串和整数转换为bytestrings(并返回),这正好是一个字节的8位。如果出于某种原因,您希望这些二进制bytestrings作为由01字符组成的文本字符串,那么当然可以以二进制形式打印它们。在

编辑:忘记提醒您如何在Python2.6或更高版本中将字节格式化为由01字符组成的文本字符串:

>>> format(23, '08b')
'00010111'

当然,要从这样一个字符串返回到一个字节:

^{pr2}$

相关问题 更多 >