【问题标题】:how to remove instances and possible multiple instances of a certain word in a string and return a string (CODEWARS dubstep)如何删除字符串中某个单词的实例和可能的多个实例并返回一个字符串(CODEWARS dubstep)
【发布时间】:2021-09-08 00:49:08
【问题描述】:

我已经使用 python 参加了 CODEWARS dubstep 挑战。

我的代码在下面,它可以工作并且我通过了 kata 测试。但是,我花了很长时间,最终使用了蛮力方法(新手)。

(基本上替换和分割字符串直到它起作用)

请与 cmets 有关如何改进我的代码的任何想法?

任务摘要:

让我们假设一首歌由一些单词组成(不包含 WUB)。为了制作这首歌的 dubstep remix,Polycarpus 在歌曲的第一个词之前(数字可能为零)、最后一个词之后(数字可能为零)和词之间(任何一对相邻单词之间至少一个),然后男孩将包括“WUB”在内的所有单词粘在一起,并在俱乐部播放这首歌。

例如,带有“I AM X”字样的歌曲可以转换为“WUBWUBIWUBAMWUBWUBX”的 dubstep 混音,但不能转换为“WUBWUBIAMWUBX”。

song_decoder("WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB")
# => WE ARE THE CHAMPIONS MY FRIEND

song_decoder("AWUBBWUBC"), "ABC","WUB 应替换为 1 个空格"
song_decoder("AWUBWUBWUBBWUBWUBWUBC"), "ABC","multiples WUB 应仅替换为 1 个空格"
song_decoder("WUBAWUBBWUBCWUB"), " ABC","应删除标题或尾随空格"


提前致谢,(我也是stackoverflow的新手)

我的代码:

def song_decoder(song):
new_song = song.replace("WUB", " ")
new_song2 = new_song.strip()
new_song3 = new_song2.replace("   ", "  ")
new_song4 = new_song3.replace("  ", " ")
return(new_song4)

【问题讨论】:

  • 正则表达式是一个选项:def song_decoder(song): return re.sub("(WUB)+", ' ', song).strip()
  • 我使用那个功能失败了! test.assert_equals(song_decoder("AWUBBWUBC"), "ABC","WUB 应替换为 1 个空格") 文件 "/workspace/default/solution.py", 第 2 行, 在 song_decoder return re.sub("(WUB )+", ' ', song).strip() NameError: name 're' is not defined
  • 您必须import re 才能使用正则表达式。
  • 谢谢!是的 import re 有效 :)

标签: python string replace strip


【解决方案1】:

我不知道它是否可以改进,但我会使用splitjoin

text = 'WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB'
text = text.replace("WUB", " ")
print(text)
words = text.split()
print(words)
text = " ".join(words)
print(text)

结果

 WE ARE  THE CHAMPIONS MY FRIEND 
['WE', 'ARE', 'THE', 'CHAMPIONS', 'MY', 'FRIEND']
WE ARE THE CHAMPIONS MY FRIEND

编辑:

Dittle 不同的版本。我拆分了 usinsg WUB 但随后它在两个 WUB 之间创建了空元素,它需要删除它们

text = 'WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB'

words = text.split("WUB")
print(words)

words = [x for x in words if x]    # remove empty elements
#words = list(filter(None, words))  # remove empty elements
print(words)

text = " ".join(words)
print(text)

【讨论】:

  • 是的,它成功了!谢谢 :) 我的理解是 split 函数忽略任何空格“”,包括双或三重空格“”、“”等,只是将实际文本/字符串内容放入列表中。然后join方法会根据需要加入列表内容。
  • 是的,split() 在空格(空格、制表符、回车)上进行拆分,与使用 split("WUB") 的工作方式略有不同,后者在两个 WUB 之间创建空元素。查看代码中的新示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 2018-05-12
  • 2018-09-23
相关资源
最近更新 更多