我需要使用for循环将input_string转换为下面的注释。首先我使用split()
函数对其进行切片,但现在我需要以某种方式将输入字符串转换为['result1', 'result2', 'result3', 'result5']
。我尝试将.xls
和短划线替换为空(''
),但字符串输出未更改。请不要导入任何内容,我只是尝试使用函数和循环。
input_string = "01-result.xls,2-result.xls,03-result.xls,05-result.xls"
# Must be turned into ['result1','result2', 'result3', 'result5']
splitted = input_string.split(',')
for c in ['.xls', '-', '0']:
if c in splitted:
splitted = splitted.replace(splitted, 'c', '')
当我输入splitted
时,输出为['01-result.xls', '2-result.xls', '03-result.xls', '05-result.xls']
,因此不会发生任何事情。
答案 0 :(得分:3)
使用re module's sub
功能和split
。
>>> input_string = "01-result.xls,2-result.xls,03-result.xls,05-result.xls"
>>> import re
>>> re.sub(r'(\d+)-(\w+)\.xls',r'\2\1',input_string)
'result01,result2,result03,result05'
>>> re.sub(r'(\d+)-(\w+)\.xls',r'\2\1',input_string).split(',')
['result01', 'result2', 'result03', 'result05']
不使用导入,您可以使用list comprehension
>>> [''.join(x.split('.')[0].split('-')[::-1]) for x in input_string.split(',')]
['result01', 'result2', 'result03', 'result05']
这里的算法是,我们在,
上拆分后循环遍历字符串。现在,我们将.
上的单个词和-
上的第一个元素分开。我们现在有了数字和单词,我们可以轻松join
.
列表补答的完整说明 -
要了解列表理解是什么,请阅读What does "list comprehension" mean? How does it work and how can I use it?
得出答案,
在,
上拆分输入列表,为我们提供了单个文件名列表
>>> input_string.split(',')
['01-result.xls', '2-result.xls', '03-result.xls', '05-result.xls']
现在使用list comprehension构造,我们可以遍历这个,
>>> [i for i in input_string.split(',')]
['01-result.xls', '2-result.xls', '03-result.xls', '05-result.xls']
由于我们只需要文件名而不是扩展名,因此我们split
使用.
并获取第一个值。
>>> [i.split('.')[0] for i in input_string.split(',')]
['01-result', '2-result', '03-result', '05-result']
现在我们需要的是数字和名称两部分。所以我们再次按-
>>> [i.split('.')[0].split('-') for i in input_string.split(',')]
[['01', 'result'], ['2', 'result'], ['03', 'result'], ['05', 'result']]
现在我们在列表中有[number,name],但我们需要的格式为"namenumber"
。因此我们有两个选择
i.split('.')[0].split('-')[1]+i.split('.')[0].split('-')[0]
。这是一个不必要的漫长道路str.join
以加入''.join(x.split('.')[0].split('-')[::-1])
。所以我们得到了最终的列表理解
>>> [''.join(x.split('.')[0].split('-')[::-1]) for x in input_string.split(',')]
['result01', 'result2', 'result03', 'result05']
答案 1 :(得分:2)
如果您不想使用re。
,这是使用列表理解和字符串操作的解决方案input_string = "01-result.xls,2-result.xls,03-result.xls,05-result.xls"
# Must be turned into ['result1','result2', 'result3', 'result5']
splitted = input_string.split(',')
#Remove extension, then split by hyphen, switch the two values,
#and combine them into the result string
print ["".join(i.split(".")[0].split("-")[::-1]) for i in splitted]
#Output
#['result01', 'result2', 'result03', 'result05']
此列表理解的工作方式是:
i.split(".)[0]
-
并切换号码和“结果”的位置。 .split("-")[::-1]
"".join()