Kezdőoldal » Számítástechnika » Programozás » Az append miért írja felül a...

Nopeman114 kérdése:

Az append miért írja felül a lista összes elemét és hogy tudnám orvosolni a problémát?

Figyelt kérdés

Sziasztok! Python-ban programozok és a 2010 májusi info érettségit csinálnám.


Most próbálom a beolvasott stringet 3 elemenként külön listákra bontani, ami egy nagy listába kerülne. Ezzel könnyen megtudnám oldani a feladatokat. Viszont, amikor appendelek a valahogy az összes elem felülíródik a 'sorok'-ban. Nem értem miért.


Itt a kód:


tmp = []

sor1 = []

sorok = []

cycle = 0


"""a = open('eladott.txt','rt')

content = a.read()

a.close()"""


with open('eladott.txt','r') as a: # splitelni kell stripelni

content = a.read()


values = content.split()

print('KÜLÖN VANNAK: ',values)


for x in values:

cycle = cycle+1

tmp.append(x)

print('ez a cycle: ',cycle)

print('ez a tmp: ',tmp)

if cycle == 3:

sor1.extend(tmp)

print('ez a sor1: ', sor1)

tmp.clear()

print('tmp törlés után: ',tmp)

continue

elif cycle % 3 == 0:

sorok.append(tmp)

print('ez a sorok: ', sorok)

tmp.clear()

print('tpm sok törlés után: ', tmp)

continue

else:

continue



print('sorok: ',sorok)

print('első sor: ', sor1)



2020. nov. 12. 17:34
 1/4 anonim ***** válasza:
83%
Egy Python-program értelmezhetetlen a behúzások nélkül. Tedd fel valami kódmegosztóra.
2020. nov. 12. 18:07
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
91%

sorok.append(tmp)

print('ez a sorok: ', sorok)

tmp.clear()


Itt appendeled a tmp-t, de aztan torlod is a tartalmat.

2020. nov. 12. 18:10
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
63%

A kulcsszó itt a referenciákon van. Az a lényeg, hogy amikor az egyik változót beleteszed a másikba, akkor a referenciáját teszed bele, így, amikor megváltoztatod az értékét, akkor a "sorok" listában lévő referencia a megváltoztatott értékre fog mutatni.


Itt van bővebben: [link]


Az a lényeg, hogy ne a listát/lista referenciáját, hanem a lista másolatát kell beletenni:


sorok.append(tmp.copy())

2020. nov. 12. 18:17
Hasznos számodra ez a válasz?
 4/4 zozo256 ***** válasza:
90%

2-es válaszoló jól mondja, kitörlöd utána a tartalmát, miután hozzá appendeled a listához. Akkor az a listaelem ugyanarra a memóriacímre fog mutatni, mint a tmp változód, így ha tmp-t kiüríted, akkor a listában is üres lesz. Annyi a dolgod, hogy ezt írod helyette:

sorok.append(tmp[:])

Ezzel egy másolatát rakod be a listába a tmp-nek, és ha utána törlöd a tmp-t akkor az nem fogja bántani a listába rakottat.

2020. nov. 12. 18:20
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!