【问题标题】:Python 3. How to find all possible consecutive character swaps of a stringPython 3. 如何查找字符串的所有可能的连续字符交换
【发布时间】:2021-07-10 00:07:22
【问题描述】:

我正在尝试找到一种方法来获取字符串中所有可能的连续字符交换的列表。我必须在没有任何花哨的工具(如 itertools)的情况下做到这一点,这使得它变得更加困难。例如:

x = 'costumye'

应该产生列表: ['ocstumye', 'csotumye', 'cotsumye',...(因为有很多可能性), 'costumey'] 我的代码:

x = 'costumye'
possible_w = []
def swap(wurd):
    wurd = list(wurd)
    for i in range(len(wurd)-1):
        reg = x[i], x[i+1]
        reg = x[i+1], x[i]
        print(reg)
swap(x)  

仅此代码就可以获得单词应该交换位置的正确不同实例。不好的是它们只是元组,这是有道理的。我现在无法更改每个交换的整个单词,并将每个交换实例附加到我的列表中以获得具有所有可能性的最终列表。

【问题讨论】:

  • reg 与您想要的输出有何关系?为什么你分配给它并且他们立即覆盖它?
  • 哦,我只是在用索引测试交换。我覆盖它是因为我这样做是为了交换连续的字母。

标签: python string list function recursion


【解决方案1】:

首先,编写代码以将给定位置i 与下一个字母交换。你的新词有四个元素:

  • 直到i位置的字母
  • i+1i 处的字母
  • 单词的其余部分

简单地按顺序连接它们——给出单词x和位置i

swap_word = x[:i] + x[i+1] + x[i] + x[i+2:]

现在,您需要循环遍历所有可交换位置:

for i in range(len(x)-1):    # Don't try to swap the last letter with the one after

最后,积累结果。从一个空列表开始;在每次迭代中追加新词:

swap_list = []
for i in range(len(x)-1):    # Don't try to swap the last letter with the one after
    swap_word = x[:i] + x[i+1] + x[i] + x[i+2:]
    swap_list.append(swap_word)

你能从那里完成吗?


太好了。现在,如果您想要“更高平面”的 Pythonic 答案,您的整个函数将简化为一个列表理解:“返回一个 this 字符串表达式列表,用于有效范围内的每个位置”

return [ x[:i] + x[i+1] + x[i] + x[i+2:] for i in range(len(x)-1) ]

【讨论】:

  • 是的,我想我明白了
  • 是的,我能够将它实现到我的函数中。非常感谢您也解决了上一封信和上一封信的问题。
猜你喜欢
  • 2023-04-05
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多