2015-03-03 2 views
2

У меня есть список каталогов в виде строк. Я хотел бы перебирать весь список и добавлять каждый элемент в новый список, основываясь на подсчете размера файла элемента, но увеличивая итерацию внешнего списка каждый раз, когда заданный порог достигается счетчиком.Python: Перемещение элементов в новый список на основе значения счетчика

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

Я пробовал много разных подходов, но не смогли вернуться к началу первого цикла после того, как счетчик достигнет порогового значения. Я использовал цикл while, встроенный в цикл for. Я понимаю, что пример кода до выхода после того, как счетчик достигнет 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 

ответ

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. 
0

Возможно, вы хотите добавить товар по одному в строку в item_list? Я думаю, вы можете неправильно понять функцию добавить список (встроенный python).

например.

a = [1,2] 
b = [] 
b.append(a) will be b = [[1,2]] not b = [1,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) 
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 

Полагая счетчик = 0 после цикла, а в течение цикла будет перейти к следующему значению в списке пункт, а затем конти nue с любой операцией, которую вы делаете.

Это немного сложно понять, что именно вы имеете в виду, но я уверен, что это должно помочь.

Смежные вопросы