Seite 1 von 1

code schreibweise rätselhaft

Verfasst: Donnerstag 26. Januar 2017, 18:22
von flip1982
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!

Re: code schreibweise rätselhaft

Verfasst: Donnerstag 26. Januar 2017, 18:45
von Sirius3
@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)

Re: code schreibweise rätselhaft

Verfasst: Donnerstag 26. Januar 2017, 18:46
von snafu
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)

Re: code schreibweise rätselhaft

Verfasst: Donnerstag 26. Januar 2017, 19:05
von flip1982
ok, danke für die Tipps!!