2015-12-28 4 views
-1

Я нашел этот пост: How to list all files of a directory?Выработать на следующей строке

именно:

from os import listdir 
from os.path import isfile, join 
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))] 

Я все еще учусь питона, и я использовал эту строку в коде что-то на работе, и я хотел бы понять, конкретно «f для f». Почему одна и та же переменная называется дважды? Спасибо!

+3

Вы должны Google «питона список понимание». – Turn

+0

Не читайте его 'f for f', читайте его как' f (для f в чем-то) ' – tglaria

ответ

0

Это не называется «дважды». Это то, как вы пишете понимание списка. Мы можем «раскатать» этот список понимание в цикл, чтобы сделать его легче понять:

lst = [] 
for f in listdir(mypath): 
    if isfile(join(mypath, f)): 
     lst.append(f) 

Объяснение:

[f for f in listdir(mypath) if isfile(join(mypath, f))] 
^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ 
| |      Condition to satisfy 
| What to iterate over 
What to append to output list 

Общее правило из списка понимания, если что вы итерацию над источником (или некоторая повторяемость), каким-то образом модифицируя каждый элемент в этом источнике или гарантируя, что он удовлетворяет некоторому условию перед добавлением его в ваш новый выходной список.

Другой пример, где вы хотите, чтобы удалить все неположительные номера из списка источников, и двойные все позитивы:

src = [-1, -2, 0, 1, 2] 
out = [i*2 for i in src if i > 0] 
print(out) # [2, 4] 
+0

Спасибо большое всем! Как я уже упоминал, все еще очень рано на моей стадии обучения. Я удалю этот пост, поскольку, как я вижу, на этот вопрос был дан ответ раньше, я просто не знал, как его искать. Еще раз большое спасибо за вашу помощь. – Tak

0

Это легко сказать x for x. Это просто означает составить список значений f для каждого значения fin в каталоге if это файл.

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