将字符串转换为列表 - str2list('[abc]') 应该返回 ['a','b','c']

Posted

技术标签:

【中文标题】将字符串转换为列表 - str2list(\'[abc]\') 应该返回 [\'a\',\'b\',\'c\']【英文标题】:Converting string to list - str2list(‘[abc]’) should return [‘a’,‘b’,‘c’]将字符串转换为列表 - str2list('[abc]') 应该返回 ['a','b','c'] 【发布时间】:2022-01-11 23:33:59 【问题描述】:

我是编程新手,我正在尝试转换输入的字母和正方形字符串 方括号(即 [ 和 ])到字母和列表的列表中。方括号 识别列表的开始和结束位置,而每个字母都转换为 对应列表的元素。

str2list(‘[abc]’) 应该返回 [‘a’,‘b’,‘c’] str2list(‘[a[bc]]’) 应该返回 [‘a’,[‘b’,‘c’]]

我的尝试是:

尝试 1:

  def str2list(s):
      list1=[]
      list1[:0]=s
    #     s.replace(',', '')
    #     a = s.split(",")
      list1.append([])
      return list1

 str2list('[abc]')

尝试 2:

def str2list(s):
    list1=[]
    list1[:0]=s
    return list1

str2list('[abc]')

但是,我没有得到想要的输出。我被困住了。有人可以帮助我并告诉我需要做什么吗?

【问题讨论】:

【参考方案1】:
def s2l(i):
    while True:
        n = next(i)
        if n == '[':
            yield [x for x in s2l(i) ]
        elif n == ']':
            return
        else:
            yield n

res = next(s2l(iter("[ab[123]cd]")))

print(res) 将返回

['a', 'b', ['1', '2', '3'], 'c', 'd']

【讨论】:

哇,在循环中的循环中生成器中的推导中的递归:) 感谢您的帮助,我尝试了您的代码,但它显示错误或奇怪的输出,例如“”。你能帮忙吗? 为 py3 更新【参考方案2】:

您只需要仔细考虑 if-else-conditions:

def str2list(my_str):
    out = []
    for s in my_str.split('['):
        if ']' in s[:-1]:
            s1 = s.split(']')
            s1 = [list(s1[0])]+list(s1[1])
        elif s[-1:] == ']':
            s1 = [list(s.strip(']'))]
        else:
            s1 = list(s)
        out.extend(s1)
    return out

print(str2list('[wewr[sfs]]'))
print(str2list('[wewr[sfs]da]'))
print(str2list('[wewr[sfs]da[ds]]'))
print(str2list('[wewr[sfs]da[ds][dfd]]'))

输出:

['w', 'e', 'w', 'r', ['s', 'f', 's']]
['w', 'e', 'w', 'r', ['s', 'f', 's'], 'd', 'a']
['w', 'e', 'w', 'r', ['s', 'f', 's'], 'd', 'a', ['d', 's']]
['w', 'e', 'w', 'r', ['s', 'f', 's'], 'd', 'a', ['d', 's'], ['d', 'f', 'd']]

【讨论】:

str2list("[ab[cd[efg]]]") 呢?

以上是关于将字符串转换为列表 - str2list('[abc]') 应该返回 ['a','b','c']的主要内容,如果未能解决你的问题,请参考以下文章

PHP:如何输出这样的列表:AA、AB、AC,一直到 ZZZY、ZZZZ、ZZZZA 等

将数据框转换为元组列表[重复]

python字符串和列表之间相互转换

在传递给 SVM 分类器之前将字符串数据转换为浮点数

Pandas DataFrame 将 jsons 列列表转换为信息行,每个“id”

如何将包含列表的列转换为熊猫数据框中的单独列? [复制]