Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyCode Conference :: https://pycode-conference.org/
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Problem petla i if statement  (Przeczytany 1302 razy)
« : 14:57 13/07/18 »
magic Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 53


Witam was :-)
Dzis mam probleme z petla, przegladalem wyniki na stackoverze i tutaj znalazlem jeden temat, ale nie moge tego przejsc:
Mam liste z czasami mam posegregowac te czasy w grupy w przedziale mniejszym niz 5 sekund kazdy nastepny czas, bazujac sie na innej liscie w ktorej mam moje czasy wyjsciowe.
Oto moja lista img:
Kod
[32372, 32373, 32373, 32374, 32374, 32375, 32375, 34880, 34880, 34881, 34881, 34882, 34882, 34883, 34883, 36505, 36505, 36506, 36506, 36507, 36507etc..]
 
To moja lista mili:
Kod
mili = [32372, 34880]
 
To czesc mojego skryptu:
Kod
img.sort()
mili = [32372, 34880]
for n in mili:
   print(n)
   for i in img:
       #print(i[0])
       if n == i[0]:
           if groups and i[0] - groups[-1][-1][0] <= 5:
               groups[-1].append(i)
           else:
               groups.append([i])
   for ii in groups:
       print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])
 
A oto wynik:
Kod
32372 mili
F:\rubish\VOL1\cam\G0013025.JPG 32372 32372 F:\rubish\VOL1\cam\G0013025.JPG
34880 mili
F:\rubish\VOL1\cam\G0013025.JPG 32372 32372 F:\rubish\VOL1\cam\G0013025.JPG
F:\rubish\VOL1\cam1\G0045004.JPG 34880 34880 F:\rubish\VOL1\cam1\G0045005.JPG
 
Process finished with exit code 0
 
1sza Grupa powinno byc 7 elementow, 2ga powinna miec 8, a mi zaczyna ok ale koniec jest na tym samym czasie.... bierze tylko ten wskazany element wyjsciowy...
Musze inkrementacje dodac gdzies ??
Powiedzcie mi co robie nie tak ? Dlaczego to nie chce dzialac ?? Powinno dzialac normalnie, ja juz wypalony jestem na dzis chyba nic nie widze ...

Dodam ze jak wrzucam skrypt w takiej postaci bez dodawania wartosci bazowej , tylko zaczyna od 1szego czasu z listy mam to wszystko ladnie w grupach :
Kod:
Kod
img.sort()
groups = []
for i in img:
   if groups and i[0] - groups[-1][-1][0] <= 5:
       groups[-1].append(i)
   else:
       groups.append([i])
for ii in groups:
   print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])
 
Wynik:
Kod
F:\rubish\VOL1\cam\G0013025.JPG 32372 32375 F:\rubish\VOL1\cam\G0013031.JPG
F:\rubish\VOL1\cam1\G0045004.JPG 34880 34883 F:\rubish\VOL1\cam1\G0045011.JPG
F:\rubish\VOL1\cam\G0086137.JPG 36505 36508 F:\rubish\VOL1\cam\G0086143.JPG
F:\rubish\VOL1\cam1\G0086559.JPG 36729 36734 F:\rubish\VOL1\cam1\G0086569.JPG
F:\rubish\VOL1\cam\G0060691.JPG 40018 40072 F:\rubish\VOL1\cam\G0060798.JPG
 
Process finished with exit code 0
 
Zapisane
« Odpowiedz #1 : 17:45 14/07/18 »
hurgadion Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 8


Hej,
tak na pierwszy rzut oka trochę za mało danych, dlatego chyba nie ma jeszcze żadnej odpowiedzi... Po drugie wydaje mi się, że zamiast:
Kod:
i[0] - groups[-1][-1][0] <= 5
powinno być raczej:
Kod:
abs(i[0] - groups[-1][-1][0]) <= 5
ale może jestem w błędzie, pzdr...  Uśmiech
Zapisane
« Odpowiedz #2 : 11:37 15/07/18 »
wektor Offline
Hello World!

Zobacz profil
*

Reputacja: 1
Wiadomości: 20


Nie bardzo mogę ci pomóc z twoim kodem.
Ja to zrobiłem w ten sposób może ci się przyda.

mili = [32372, 34880]
czasy = [32372, 32373, 32373, 32374, 32374, 32375, 32375, 34880, 34880,
         34881, 34881, 34882, 34882, 34883, 34883, 36505, 36505, 36506,
         36506, 36507, 36507]
#print(czasy)
d = {}
for i in mili:
    d [ i ] = []
    cont = True
    j = i
    while cont:      
        for e in czasy:
            if abs(j - e) <= 5:
                d [ i ].append(e)
                if e > j:
                    j = e
                else:
                    cont = False
for i, j in d.items():
    print(i, j)
Zapisane
« Odpowiedz #3 : 10:07 06/08/18 »
magic Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 53


To dziala spoko
Kod
min_list.sort()
print(min_list)
min_list2 = list(set(min_list))
print(min_list2)
min_list2.sort()
groups = []
for start_time in min_list2:
   try:
       i = 0
       while i < len(img) and img[i][0] < start_time:
           i += 1
       groups.append([])
       while i < len(img) and img[i][0] < img[i-1][0] + interval or img[i][0] < start_time + interval:
           groups[-1].append(img[i])
           i += 1
   except IndexError:
       pass
 
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2018 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot