对于此挑战,任务是读取包含带扩展名的文件名列表的文本文件,并确定每行哪些名称是唯一的,忽略文件扩展名。
例如,考虑以下文本文件:
foo.mp3|bar.txt|baz.mp3wub.mp3|wub.mp3|wub.mp3|wub.txt|wub.pngquux.mp3|quux.txt|thud.mp3
此文件的预期输出是
foo.mp3|bar.txt|baz.mp3thud.mp3
删除扩展名后,第 1 行中的所有三个名称都是唯一的,因此整行未更改。
但是,删除第二行的扩展名后,所有 wub 文件都不是唯一的,因此根本不包含在输出中。
对于第三行,删除扩展名后,名为 quux 的文件不是唯一的,并且会从输出中删除。 thud.mp3 是唯一的并且包含在输出中。注释
文本文件中的文件名严格由字母数字组成,并带有一个句点。不涉及任何路径。分隔符始终是管道。每条线路应独立于其他线路运行;没有逻辑从一行延续到另一行。文件不会超过 500 行,并且行永远不会超过 100 个字符。
我无法使用 python 修复它。
我的代码:
def find_unique_filenames(text):
result = []
for line in text.split('\n'):
unique_names = set()
filenames = line.strip().split('|')
for filename in filenames:
name_without_extension = filename.split('.')[0]
unique_names.add(name_without_extension)
result_line = '|'.join(unique_names)
result.append(result_line)
return '\n'.join(result)
# Uncomment the next line if you want to test this module independently
# print(find_unique_filenames("foo.mp3|bar.txt|baz.mp3\nwub.mp3|wub.mp3|wub.mp3|wub.txt|wub.png\nquux.mp3|quux.txt|thud.mp3"))
unique_names = set() ... unique_names.add(name_without_extension)
这样使用
set
会导致重复的元素变成单个元素,而您应该找到只出现一次的元素。
如果您正在使用以下数据,请考虑以下简单示例
A|B|C|C|C|D|E
如果您的任务是寻找不同的元素,答案是
A|B|C|D|E
如果您的任务是查找恰好出现一次的元素,那么答案是
A|B|D|E
collections.Counter
来计算元素。