【问题标题】:split a string to have chunks containing the maximum number of possible characters将字符串拆分为包含最大可能字符数的块
【发布时间】:2022-01-20 18:51:39
【问题描述】:

例如string = 'bananaban' => ['ban', 'anab', 'an']

我的尝试:

def apart(string):
    letters = []
    for i in string:
        while i not in letters:
            letters.append(i)
    print("The letters are:" +str(letters))
    x = []
    result = []
    return result

string = str(input("Enter string: "))
print(apart(string)

基本上,如果我知道单词/字符串中的所有字母,我想将它们添加到 x 中,直到 x 包含所有字母。然后我想将 x 添加到结果中。

在我的示例“bananaban”中,这意味着 [ban] 是一个 x,因为“ban”包含字母“b”、“a”和“n”。 [anab] 也是如此。 [an] 只包含“a”和“n”,因为它是单词的结尾。

如果有人可以帮助我会很酷^^

【问题讨论】:

  • 为什么bananaban会被完全拆分成bananaban
  • 需要更多上下文。您究竟希望如何拆分字符串?因为您的示例输出和解释显示了两种不同的东西。
  • 因为 [ban] 包含 "b"、"a" 和 "n" 。 [anab] 也是如此,[an] 已经是单词的结尾
  • 您向我们展示了一些代码。它怎么不能做你想做的事?请阅读How to Ask

标签: python string function


【解决方案1】:

IIUC,你想在所有字符都在当前块中之后进行拆分。

您可以使用set 来跟踪看到的字符:

s = 'bananaban'

seen = set()
letters = set(s)
out = ['']
for c in s:
    if seen != letters:
        out[-1] += c
        seen.add(c)
    else:
        seen = set(c)
        out.append(c)
        

输出:['ban', 'anab', 'an']

【讨论】:

  • 这不是我对他的要求的解读——由于这部分“......直到 x 包含所有字母。”。不过,毫无疑问,这个问题可以更好地表述。
  • @jsbueno 我同意,我不得不说我也猜到了逻辑;)
  • @jsbueno 实际上我认为你是对的,我再次阅读,这是所有字母,我修正了我的答案
【解决方案2】:

逻辑上的方法是首先创建一个包含字符串中所有字母的集合,然后遍历原始集合,收集每个字符,并在每次集合中的字母集合与原始集合匹配时启动一个新集合。

def apart(string):
    target = set(string)
    result = []
    component = ""
    for char in string:
        component += char
        if set(component) == target:
            result.append(component)
            component = ""
    if component:
        result.append(component)
    return result

【讨论】:

    【解决方案3】:

    使用字符串中的一组字符,您可以遍历字符串并在结果列表中添加或扩展最后一组:

    S = "bananaban"
    chars  = set(S)                    # distinct characters of string
    groups = [""]                      # start with an empty group
    for c in S:
        if chars.issubset(groups[-1]): # group contains all characters
            groups.append(c)           # start a new group
        else:
            groups[-1] += c            # append character to last group
            
    print(groups)
    ['ban', 'anab', 'an']
    

    【讨论】:

    • 好代码 ;) +1
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多