将字符串转换为列表 - 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']
【讨论】:
哇,在循环中的循环中生成器中的推导中的递归:) 感谢您的帮助,我尝试了您的代码,但它显示错误或奇怪的输出,例如“您只需要仔细考虑 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 等