IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: for i in enumerate() dva výstupy

V předchozím kvízu, Online test znalostí Python 2.7, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
itlady
Člen
Avatar
itlady:10.7.2020 21:01

Z databáze načítám pomocí c.fetchall() hodnoty. Mám např. 2 hodnoty (PC1, PC2). Když použiji funkci enumerate, tak získám dvakrát stejný výstup a nevím proč.

Zkusil jsem:

x = 0
while x < len(vyber_ozn):
        for oznaceni in enumerate(vyber_ozn[x]):
                value = oznaceni[1]
                print(value)
                x += 1

Chci docílit: Výstup:
PC1
PC2
PC1
PC2

Chci zjistit, proč mám dva stejné výstupy. Když načítám z db jen jednu hodnotu (PC1), mám jeden výstup. ted jsem zjistila, že když mám tři hodnoty, vypíše mi to třikrát. Kde je chyba?

 
Odpovědět
10.7.2020 21:01
Avatar
Jiří Havelka:11.7.2020 5:17

Myslím, že enumerate není zdrojem tvých potíží. Z toho, co vydím se zdá, že použití funkce enumerate chápeš správně. Úplně si nejsem jist, co se snažíš vypsat. Ten tvůj kód vypadá vypisuje každy k-tý řádek z tabulky, kde k je počet sloupců, čož je hodně zvláštní. V první řadě bych ti doporučil přidtat na začátek pro učely testování

print (vyber_ozn)

, tak budeš mít přehled, co vše je v poli vyber_ozn. Pak už by to nemělo být tak těžké opravit. Pokud budeš chtít vypsat šechny hodnoty z pole, zkusis použít dva vnořené for cykly.
Nějak takto:

for radek in pole:
                for hodnota in radek:
                        print(hodnota)
 
Nahoru Odpovědět
11.7.2020 5:17
Avatar
itlady
Člen
Avatar
itlady:11.7.2020 9:32

Právě že print(vyber_ozn) vypíše:

[('PC1',), ('PC2',), ('PC3',)]
[('PC1',), ('PC2',), ('PC3',)]
[('PC1',), ('PC2',), ('PC3',)]

Tolikrát, kolikrát je vložená hodnota.

 
Nahoru Odpovědět
11.7.2020 9:32
Avatar
Jiří Havelka:11.7.2020 12:23

Výborně, takže znáš vstupní data. Teď je potřeba si ujasnit jaké hodnoty chceš vypsat. apiš sem řádkové a slopcocvé indexy hodnot které chceš vysat ijnak se nepohneme dál.
Jako cviční by možná také nebylo špatné si spustit následující kousek kódu (jde o upravenou verzi tvého kodu s jinými vstupními daty a více výpisy)

arr_2d = [['0_0', '0_1', '0_3'],['1_0','1_1','1_2'], ['2_0','2_1','2_2'],['3_0','3_1','3_2'],['4_0','4_1','4_2'],['5_0','5_1','5_2'],['6_0','6_1','6_2']]
index = 0
while index < len(arr_2d):
        print('vnější cyklus')
        for row in enumerate(arr_2d[index]):
                print('vnitřní cyklus')
                value = row[1]
                row_index = row[0]
                index += 1
                print('hodnota', value)
                print('index sloupce', row_index)
                print('index řádku', index)

To by ti mělo pomoci pochpit, co ten tvůj současný kód přeně dělá.

Editováno 11.7.2020 12:25
 
Nahoru Odpovědět
11.7.2020 12:23
Avatar
itlady
Člen
Avatar
itlady:15.7.2020 21:09

Pořád nevím, co je špatně. Posunula jsem se ve svém programu kousek dál, ale funkce

for index, vyb in enumerate(vyber_ozn [1:len(vyber_ozn)]):
        print(vyb)

mi pořád vypisuje to, co nechci.

Mám v tuple vložené např. 4 hodnoty:

[('HDD 1',), ('HDD 2',), ('HDD 3',), ('HDD4',)]

indexy jsou 0,1,2,3 atd ..

Výše uvedenou funkcí ignoruji první z nich (to už má ošetřené v jiné části kódu, aby pro první vloženou hodnotu se provádělo něco a pro další pak něco jiného.

Zbývající hodnoty (kdy není určen jejich konečný počet - podle vstupů) pak potřebuju vložit do values v treeview (HODNOTA). Výsledkem bude řádkový seznam, kdy na každém řádku bude hodnota z tuple seřazené dle indexů

trv.insert("", END, values = "HODNOTA", image = ikona[x])
trv.bind ("Double-1", Vysledky)

Na prvním řádku bude hodnota na indexu 0, druhý řádek hodnota na indexu 1 atd.

Funkce

for index, vyb in enumerate(vyber_ozn [1:len(vyber_ozn)]):
        print(vyb)

mi pořád vypisuje to, co jsem popisovala na začátku tohohle topicu. Jak píše Jiří Havelka:

Jak Ten tvůj kód vypadá vypisuje každy k-tý řádek z tabulky, kde k je počet sloupců, čož je hodně zvláštní.

Potřebuju ty hodnoty vypsat jen jednou, ne 4x.

 
Nahoru Odpovědět
15.7.2020 21:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.