【问题标题】:How to generate a list of palindromes with only 'x','y' and a given length n in Python?如何在Python中生成只有'x','y'和给定长度n的回文列表?
【发布时间】:2014-03-16 16:29:47
【问题描述】:

有没有什么模式可以用来解决如何创建一个由 'X' 'Y' 组成的回文字符串

【问题讨论】:

  • 提示:我有一些长度为 n/2 的字符串。可以用来构造一个长度为 n 的回文吗?
  • @IfLoop:很棒的评论,希望我在发布答案之前看到它。会让它更微妙一点。 ;-)

标签: python palindrome


【解决方案1】:

假设n 是偶数。生成由xy组成的每个长度为n/2的字符串,并附加其镜像得到回文。

练习 1:证明这会生成 所有 个长度为 n 的回文。

练习 2:找出当n 为奇数时该怎么做。

【讨论】:

  • 当n为奇数时,让中间的为x或y,然后将x/y附加到每个长度为(n-1)/2的字符串及其反向版本,对吗?
  • @user3426141:是的(由“x 或 y”提供,您的意思是“x 和 y 中的每一个”)。
  • 不知道从哪里开始生成字符串,基本情况应该是 n=0 和 1?
  • @user3426141:有很多方法可以做到这一点:递归;通过生成 0 到 2**n-1 之间的整数并查看它们的二进制表示 (0->x, 1->y);通过使用itertools.product;等等。选择。
  • @user3426141 你总是可以使用一个列表,最后用它制作字符串,如果它能让你的船更好地漂浮的话。但是没有必要,您可以以完全纯功能的方式实现它(无突变)
【解决方案2】:

首先在给定字符列表的情况下生成所有可能的字符串:

>>> from itertools import product
>>> characters = ['x','y']
>>> n = 5
>>> [''.join(i) for i in product(characters, repeat=n)]
['xxxxx', 'xxxxy', 'xxxyx', 'xxxyy', 'xxyxx', 'xxyxy', 'xxyyx', 'xxyyy', 'xyxxx', 'xyxxy', 'xyxyx', 'xyxyy', 'xyyxx', 'xyyxy', 'xyyyx', 'xyyyy', 'yxxxx', 'yxxxy', 'yxxyx', 'yxxyy', 'yxyxx', 'yxyxy', 'yxyyx', 'yxyyy', 'yyxxx', 'yyxxy', 'yyxyx', 'yyxyy', 'yyyxx', 'yyyxy', 'yyyyx', 'yyyyy']

然后过滤掉非回文:

>>> n = 4
>>> [''.join(i) for i in product(characters, repeat=n) if i[:n/2] == i[::-1][:n/2]]
['xxxx', 'xyyx', 'yxxy', 'yyyy']
>>> n = 5
>>> [''.join(i) for i in product(characters, repeat=n) if i[:n/2] == i[::-1][:n/2]]
['xxxxx', 'xxyxx', 'xyxyx', 'xyyyx', 'yxxxy', 'yxyxy', 'yyxyy', 'yyyyy']

如果你不喜欢列表推导中的 if 条件,可以使用filter():

>>> from itertools import product
>>> characters = ['x','y']
>>> n = 5
>>> def ispalindrome(x): return x[:n/2] == x[::-1][:n/2];
>>> filter(ispalindrome, [''.join(i) for i in product(characters, repeat=n)])
['xxxxx', 'xxyxx', 'xyxyx', 'xyyyx', 'yxxxy', 'yxyxy', 'yyxyy', 'yyyyy']

【讨论】:

  • 我认为你的过滤器是错误的。至少xyyxy 不是回文
  • @NiklasB。感谢您发现,忘记反转子列表 =)
猜你喜欢
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2011-12-06
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多