我需要使用 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'] 因此什么也没有发生。
请您参考如下方法:
使用 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']
现在使用列表理解构造,我们可以遍历它,
>>> [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]。这是一条不必要的长路 - 扭转他们并加入。我们可以使用切片来反转列表(参见 How can I reverse a list in python? )和
str.join来像''.join(x.split('.')[0].split( '-')[::-1]).
所以我们得到了最终的列表理解
>>> [''.join(x.split('.')[0].split('-')[::-1]) for x in input_string.split(',')]
['result01', 'result2', 'result03', 'result05']
