如何创建 3 个简单的函数来返回孤立的字符、返回重复的字符并返回删除了#comment 的字符串?

Posted

技术标签:

【中文标题】如何创建 3 个简单的函数来返回孤立的字符、返回重复的字符并返回删除了#comment 的字符串?【英文标题】:How to create 3 simple functions to return isolated chars, to return duplicated chars and to return string with #comment removed? 【发布时间】:2021-07-19 07:06:58 【问题描述】:

函数 1:remove_all_dup('abbcdddeabcc') 应该返回 'aceab'

函数 2:remove_no_rep('abbcdddeabcc') 应该返回 'bbdddcc'

函数 3:remove_py_com('"abbc#d: " not fun#ction') 应该返回 '"abbc#d: " not fun'

(请注意,# 仅在 "" 内时不会被删除,并且它们必须并且通常成对使用。)

这种练习真的让我很生气,因为他们已经在绝望中度过了好几个月。即使在while循环中提供了一个while循环的解决方案,我的逻辑也无法遵循。但是,如果我看到解决这些问题的不同方法,也许一切都会有意义。

请帮帮我。

这是我迄今为止为最后一个函数所做的:

def remove_py_com(txt):
    for letter in txt:
        if '"' not in txt or txt.find("#")<txt.find('"'):
            return txt[:txt.find("#")]
        elif "#" not in txt:
                return txt
        elif "#" in txt and '"' in txt:
            after=txt[txt.find("#"):]
            for letter in after:
                if after[1:].find("#")<after.find('"'):
                    return txt
                    for bullshit in after[after.find('"'):]:
                        txt=after[after.find('"'):] # so python go to top and check tail-txts again and again... but problem is "after" is not going for what's coming after the "quote"
# Maybe I can create 2 functions for this in a function to make it all clear for the mentally retarded like myself                                    

【问题讨论】:

到目前为止你尝试了什么? def remove_py_com(txt): for letter in txt: if '"' not in txt or txt.find("#") @UgaBuga,正如您毫无疑问地注意到的那样,cmets 中的代码不可读。您应该编辑问题并在其中包含代码。如果你用四个空格缩进代码,它会很好地格式化它。 @Nicholas Hunter 谢谢。这需要时间,但我弄清楚如何格式化所有内容。我的函数仅在字符串中没有字符串或有字符串但 # 出现在它之前并且如果字符串中有 # 而字符串结束时没有 # 出现时才起作用。 @Mark 谢谢。我想帖子上的格式现在可以正常工作,但显示我的代码似乎只表明我有多愚蠢,因为我知道我跟不上我的代码。我必须找到一种可以重复查找字符串之间是否有 # 的方法(如果它在里面,它会被忽略)我真的不想使用 while 循环... 【参考方案1】:

对于函数 1 和 2,您可以考虑定义函数来计算字符串中的每个字符是否有重复的邻居。

def find_duplicates(s):
    # compare each element with the next element
    comparisons = [i==j for i, j in zip(s[1:], s[:-1])]

    # a character is a duplicate if it is equal to one of it's neighbours
    is_duplicate = [i or j for i, j in zip([False] + comparisons, comparisons + [False])]
    return is_duplicate

这应该返回一个带有TrueFalse 的列表。例如:

>>> find_duplicates("abbcdddeabcc")
[False, True, True, False, True, True, True, False, False, False, True, True]

然后你可以使用这个函数来过滤你的原始字符串。

def remove_all_dup(s):
    is_duplicate = find_duplicates(s)
    return "".join([ch for i, ch in enumerate(s) if not is_duplicate[i]])


def remove_no_rep(s):
    is_duplicate = find_duplicates(s)
    return "".join([ch for i, ch in enumerate(s) if is_duplicate[i]])

这应该返回:

>>> remove_all_dup('abbcdddeabcc')
'aceab'

>>> remove_no_rep('abbcdddeabcc')
'bbdddcc'

【讨论】:

以上是关于如何创建 3 个简单的函数来返回孤立的字符、返回重复的字符并返回删除了#comment 的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

js 如何创建带返回值的函数

如何根据输入为字符串或未定义来创建返回字符串或未定义的打字稿函数?

简单介绍如何使用PowerMock和Mockito来mock 1. 构造函数 2. 静态函数 3. 枚举实现的单例 4. 选择参数值做为函数的返回值(转)

递归函数不返回创建的字符串

如何strcpy并返回复制的字符数?

C -(malloc、calloc 或静态)从函数返回的 2d 字符数组