我是python的新手,需要找到一种以文本格式格式化数字信号的方法。具体来说,我需要将字符串从string_old转换为list_new。希望有人可以在这里帮忙!
string_old = 'clock[5,4,1,0]'
list_new = ['clock[5]','clock[4]','clock[1]','clock[0]']
非常感谢。
答案 0 :(得分:3)
您可以使用regex
和列表理解:
>>> import re
>>> strs='clock[5,4,1,0]'
>>> nums = re.findall("\d+",strs) #find all the numbers in string
>>> word = re.search("\w+",strs).group() #find the word in the string
#now iterate over the numbers and use string formatting to get the required output.
>>> [ "{0}[{1}]".format(word,x) for x in nums]
['clock[5]', 'clock[4]', 'clock[1]', 'clock[0]']
答案 1 :(得分:0)
这是使用正则表达式,拆分和列表理解的组合来执行您所要求的代码:
import re
string_old = 'clock[5,4,1,0]'
match = re.search('(.*)\[(.*)\]', string_old)
if match:
indices = match.group(2).split(',')
list_new = ['{0}[{1}]'.format(match.group(1), ind) for ind in indices]
print list_new
答案 2 :(得分:0)
使用Python自己的解析器处理字符串的替代方法 - 如果它是duff,它将引发SyntaxError
。它可能不像正则表达式或分裂那么容易理解,但它是一个合理的替代方案 - 特别是如果你发现你正在做更多这些东西(或者看看pyparsing
可以处理这些类型的输入):
import ast
s = 'clock[5,4,1,0]'
slc = ast.parse(s).body[0].value
print ['{}[{}]'.format(slc.value.id, el.n) for el in slc.slice.value.elts]
# ['clock[5]', 'clock[4]', 'clock[1]', 'clock[0]']