Aktywne Wpisy

Bardamu +110
Widzę, że zaczyna się typowy cykl polskiego youtubera po początkowym zyskaniu sympatii ludzi ( ͡° ͜ʖ ͡°)
Mercedes? ✔
Bluza z napisem BALENCIAGA na calą klatę, żeby było widać hajs? ✔
Pierwsze dramy? ✔
#ksiazulo #polskiyoutube
Mercedes? ✔
Bluza z napisem BALENCIAGA na calą klatę, żeby było widać hajs? ✔
Pierwsze dramy? ✔
#ksiazulo #polskiyoutube
źródło: Zrzut ekranu 2024-01-26 o 18.52.48
Pobierz
zielonka18 +1059
#cyckinawosp Edycja 2024
Podobnie jak w ostatnich 3 latach, i w tym roku #wgw gra razem z #wosp! Tym razem wpłacam po 24 gr za każdego plusa dla tego wpisu oraz po 100 PLN za każde zdjęcie cycków różowego paska z czasoznaczkiem i nickiem. Zdjęcia mogą być pod tym wpisem albo jako osobny wpis na tagu #wgw. Pamiętajcie o oznaczeniu ich jako NSFW.
Podsumowania akcji z poprzednich lat:
-
Podobnie jak w ostatnich 3 latach, i w tym roku #wgw gra razem z #wosp! Tym razem wpłacam po 24 gr za każdego plusa dla tego wpisu oraz po 100 PLN za każde zdjęcie cycków różowego paska z czasoznaczkiem i nickiem. Zdjęcia mogą być pod tym wpisem albo jako osobny wpis na tagu #wgw. Pamiętajcie o oznaczeniu ich jako NSFW.
Podsumowania akcji z poprzednich lat:
-
źródło: wosp
Pobierz




A:
with open('loss.csv', 'rb') as csvfile:
data = [row[1:] for row in csv.reader(csvfile, delimiter='\t')][1:]
data = [filter(None, sublist) for sublist in data]
data = [map(float, sublist) for sublist in data]
B:
with open('loss.csv', 'rb') as csvfile:
data = [map(float, filter(None, row[1:])) for row in csv.reader(csvfile, delimiter='\t')][1:]
Generalnie jak się da to zbijać do jednej linii, czy może rozbijać wszystko na poszczególne kroki? Wolałbym sobie od początku wyrabiać dobre nawyki.
#naukaprogramowania #programowanie #python
Komentarz usunięty przez autora
Z tego co wiem zalecane jest używanie list comprehension zamiast map i filter.
[ [float(d) for d in row[1:] if d is not None] for row in csv.reader(csvfile, delimiter='\t')][1:]B nie jest zgodny z PEP8.
@legolass: nie byłbym tak radykalny. Polecam http://stackoverflow.com/questions/1247486/python-list-comprehension-vs-map
Osobiście skłaniałbym się w kierunku czegoś takiego (kropki to oczywiście spacje):
data = [
....[
........float(item)
........for item in row[1:]
........if item
....]
....for row in csv.reader(csvfile, delimiter='\t')
][1:]
Próbowałem się przekonać
...reader = csv.reader(csvfile)
...reader.next()
...rows = (row[1:] for row in reader(csvfile, delimiter='\t'))
...filtered = (filter(None, sublist) for sublist in rows)
...converted = (map(float, sublist) for sublist in filtered)
Polecam slajdy z prezentacji: http://www.dabeaz.com/generators/Generators.pdf
[ [float(d) for d in row[1:] if d] for row in csv.reader(csvfile, delimiter='\t')][1:]d przyjmuje w if wartość True jeśli jest "niepuste", tak jak u @molski:
@gofr: @luzny_lori: Dzięki za odpowiedzi.
Podsumowując: czytelność >> zwięzłość?
@Kontestator: wychodzę z założenia że ktoś mój kod będzie czytał i nie musi to być osoba oblatana w pythonie, niemniej jednak moje rozwiązanie niewiele różni się formą od Twojego pierwowzoru głównie dlatego, że bardzo ładnie podpadło pod "generators pipeline" z linka powyżej (tl;dr - slajdy 1-35 - 1-42) - koncepcja świetna, warto było wspomnieć.
pominąłem kompletnie co tam robiłeś tymi mapami i filterami, nie znam formatu danych
dbyłoby równe 0 (cyfra a nie znak) to wtedy zostałoby ignorowane.@molski: to działa, ale trzeba dodać
list(), wtedy wygląda to tak:data = [[float(d) for d in row[1:] if d] for row in list(csv.reader(csvfile, delimiter='\t'))[1:]]bez tego
list()się wykrzacza. Zawsze to się przetwarza jedną linię mniej, także dobra uwaga.@Kontestator: właśnie dlatego powinieneś poczytać czym jest iterator. a wykrzacza się bo obrabiasz cały plik, włącznie z pierwszą linią, która w Twoim przypadku najwyraźniej zawiera deklarację nazw pól (raczej nic "floatowalnego") - u mnie sprawę załatwiło
reader.next()data = [[float(d) for d in row[1:] if d] for row in csv.reader(csvfile, delimiter='\t')[1:]]
TypeError: 'csv.reader' object has no attribute 'getitem_'
Czyli po prostu nie na wszystko co można iterować działa slice. Inny przykład to dictionary.
Zrób tak:
reader = csv.reader(csvfile, delimiter='\t')reader.next()data = [[float(d) for d in row[1:] if d] for row in reader]Nie będziesz całego pliku do pamięci ładował.