【问题标题】:make list inside list [closed]在列表中制作列表[关闭]
【发布时间】:2021-12-10 01:34:59
【问题描述】:

我想在列表中创建一个列表

def makelist(s):
        res = []
        for samp in s:
            res += list(samp.lstrip('[').rstrip(']'))
        return res
  • s = '[p[da]]'
  • 输出为 ['p','d','a']
  • 但我想在里面添加列表使其看起来像这样 ['p'['d','a']]

【问题讨论】:

  • 请提供一个完整的例子,其他人可以运行并显示问题。你说“输入是 [p[da]”——你的意思是用参数p 设置为'[p[da]' 来调用函数吗?或者...
  • 您好,很抱歉造成混乱。我已经编辑了帖子。

标签: python python-3.x list


【解决方案1】:

您正在循环一个字符串(s,值为'[p[da]]'),因此samp 将依次是字符串中的每个字符('[''p' 等) - 然后您继续去掉括号,并将结果转换为字符列表。如果字符是括号,则该列表将始终为空,否则该字符将始终为空。您的代码不会对嵌套括号或任何类似的东西进行分组。

非递归解决方案:

def makelist(s):
    part = []
    stack = []
    for ch in s:
        if ch == '[':
            part.append([])
            stack.append(part)
            part = part[-1]
        elif ch == ']':
            if stack:
                part = stack.pop()
            else:
                raise SyntaxError('Too many closing brackets')
        else:
            part.append(ch)
    if stack:
        raise SyntaxError('Too many opening brackets')
    return part


print(makelist('[p[da]]'))
print(makelist('[a[b[c]d]e]'))
print(makelist('123'))
try:
    print(makelist('[a]]'))
except Exception as e:
    print(e)
try:
    print(makelist('[[a]'))
except Exception as e:
    print(e)

结果:

[['p', ['d', 'a']]]
[['a', ['b', ['c'], 'd'], 'e']]
['1', '2', '3']
Too many closing brackets
Too many opening brackets

【讨论】:

    【解决方案2】:

    首先,我很抱歉这个解决方案。我为我刚刚写的东西而自嘲。由于缺少有关输入参数的信息,我不得不做出许多假设。

    import ast
    
    def string_to_list(string: str):
      def sort_the_sting(string: str):
        return string.replace("]'", "],'").replace("][", "],[").replace("'[", "',[").replace("''", "','")
      strval = ""
      for character in string:
        strval += "".join(("'", character, "'") if character.isalpha() else (character))
      return ast.literal_eval(sort_the_sting(strval))
    

    您可以通过string_to_list("[p[da]]")复制您的示例

    函数中发生了什么:for循环遍历给定字符串的字符,在字母字符的每一侧添加'。然后通过替换一些字符组合,您最终会得到序列化字符串,准备好成为converted into a list object

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      相关资源
      最近更新 更多