首页 > 解决方案 > 如何从文件名列表中收集文件名,将文件的每个长度分成 n 秒部分 - leetcode 之类的问题

问题描述

给定一个文件名列表及其相应的文件长度:(文件是音频数据列表,并且在秒数上有所不同,因此大小不同)

例如

filename_and_len = [["file1", 6], ["file2, 4], ["file3", 9], ["file4", 7]]

n 是您希望将每个剪辑分割成的所需秒数,因此我们输出每个 n 秒剪辑的文件名列表,例如当 n=5 时:

["file1", "file1_file2", "file3", "file3_file4", "file4"]

假设 n 已经是一个可以被文件中的总秒数整除的数字。

以下是我到目前为止的代码:

filename_and_len = [["file1", 6], ["file2", 4], ["file3", 9], ["file4", 7]]

n_temp = n
final_file_names = []
while n_temp < n:
    for i in range(len(filename_and_len)):
        if filename_and_len[i][1] > n: 
            final_file_names[i] = filename_and_len[i][0]
            n_temp =  n_temp + n
        elif filename_and_len[i][1] < n: 
            final_file_names[i] = filename_and_len[i][0]
            i++

我还没有完成这段代码,但我想知道这是否是正确的方向?

标签: pythonpython-3.xlist

解决方案


import itertools as it

filename_and_len = [["file1", 6], ["file2", 4], ["file3", 9], ["file4", 7]]

filenames, lengths = zip(*filename_and_len)

# Get two iterables of the `filenames` variable
nameiters = it.tee(filenames, 2)

# Advance the second iterator one position
next(nameiters[1])

# Zip up the iterators and join element together with an "_" character
namejoins = map("_".join, zip(*nameiters)))

# Now zip the filenames into the joined names and flatten with a chain
chained = it.chain(*zip(filenames, namejoins))

# Now slice N from the chain
sliced = it.islice(chained, N)

# Collect into a `list` and print.
print(list(sliced))

推荐阅读