code schreibweise rätselhaft

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

Hallo allerseits,
hab einen interessanten code gefunden, aber leider ist mir die schreibweise fremd... (ich benutze python 2.7). kann mir jemand erklären was es mit der schreibweise auf sich hat?
hier der code:

Code: Alles auswählen

files = [f for f in os.listdir(train_data_path) if f.endswith('.shp')]
classes = [f.split('.')[0] for f in files]
shapefiles = [os.path.join(train_data_path, f)
              for f in files if f.endswith('.shp')]

labeled_pixels = vectors_to_raster(shapefiles, rows, cols, geo_transform,
                                   proj)
is_train = np.nonzero(labeled_pixels)
training_labels = labeled_pixels[is_train]
training_samples = bands_data[is_train]
z.b. die eckigen klammern bei der variable files?? und eine if schleife darin?? und vor der schleife ein f?? :K
wie würde man das auf herkömmliche weise schreiben?
Ich hoffe es kann mir jemand helfen. Danke!
Zuletzt geändert von Anonymous am Donnerstag 26. Januar 2017, 18:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@flip1982: es handelt sich um eine sogenannte List-Comprehension.
Gewöhnlich würde man das wahrscheinlich so schreiben:

Code: Alles auswählen

def get_class(filename):
    return os.path.splitext(os.path.basename(filename))[0]

shapefiles = glob.glob(os.path.join(train_data_path, '*.shp'))
classes = map(get_class, shapefiles)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das Stichwort heißt List Comprehension. Im Prinzip kann man das gut runterlesen, wenn man das erste Element ans Ende verschiebt:

Code: Alles auswählen

files = [f for f in os.listdir(train_data_path) if f.endswith('.shp')]

# ...wird zu:
files = []
for f in os.listdir(train_data_path):
    if f.endswith('.shp'):
        files.append(f)
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

ok, danke für die Tipps!!
Antworten