Python:根据计数器值将项目移动到新列表

时间:2015-03-03 02:22:02

标签: python list

我有一个目录列表作为字符串。我希望遍历整个列表并基于计算项目的文件大小将每个项目附加到新列表中,但是每当计数器达到给定阈值时增加外部列表迭代。

output_list = [['file1.txt', 'file2.txt'],['file3.txt', 'file4.txt'],['file5.txt']]

我已经尝试了很多不同的方法,但是一旦计数器达到阈值,我们就无法返回到第一个循环的顶部。 我一直在使用嵌入在for循环中的while循环。我理解,一旦计数器达到x,我将退出之前的代码示例,我只是在返回到for循环的顶部时遇到问题,或者"重置"柜台。

import os

counter = 0
item_list = []
for i in list:
    while counter < x:
        item_list.append(i)
        counter += os.path.getsize(i)

return item_list

4 个答案:

答案 0 :(得分:0)

我很难理解你的问题(我没有足够的声誉发表评论,所以我必须回答)。如果我理解正确,也许会这样做:

counter = 0
item_list = []
for i in list:
    item_list.append(i)
    counter += os.path.getsize(i)
    if counter > x:
        break # gets out of the for loop.

答案 1 :(得分:0)

你的意思是逐项将项目作为字符串添加到item_list中吗?我想你可能会误解功能附加列表(python内置)

e.g。

a = [1,2]
b = []
b.append(a) will be b = [[1,2]] not b = [1,2]

所以你的计数器每次都会加一个。希望它可能有所帮助。

答案 2 :(得分:0)

这就是你正在做的事情:

import os

output_list = [['file1.txt', 'file2.txt'],['file3.txt', 'file4.txt'],['file5.txt']]
counter = 0
item_list = []
for l in list:
    # At this point variable l is a list, containing strings
    while counter < x: 
        # Append a list containing strings (not strings like we want)
        item_list.append(l)
        counter += os.path.getsize(l)

return item_list

这是你想要做的:

import os

def file_stuff(output_list):
    counter = 0
    i = 0
    item_list = []

    # go through each list
    for files in output_list:
        # files = a list of strings
        while i < len(files) or counter <= x:
            # go through all the files
            # or until the counter is too large

            item_list.append(files[i])
            counter += os.path.getsize(files[i])
            i += 1

        # reset counter variable after each sublist
        counter = 0
        i = 0

    return item_list

output_list = [['file1.txt', 'file2.txt'], ['file3.txt', 'file4.txt'],['file5.txt']]

print file_stuff(output_list)

答案 3 :(得分:0)

我认为您只想将问题中的代码更改为:

import os

counter = 0
item_list = []
for i in list:
    while counter < x:
        item_list.append(i)
        counter += os.path.getsize(i)
    counter=0
return item_list

在for循环中的while循环之后放置counter = 0将移动到项目列表中的下一个值,然后继续执行您正在执行的任何操作。

有点难以理解你究竟是什么意思,但我很确定这应该有所帮助。