Pythonban ha egy lista elemei listák és, hogy a viharba lehet megtudni, hogy a lista elemek mennyit tartalmaznak egy bizonyos elemből?
x=[['ghg','zdz],[zkk','kvv'],['txt',kkk,]]é azt szeretném megtudni, hogy az elemek külön külön hány darab k betüt tartalmaznak.
próbáltam, hogy:
for i in x:
if i='k'
de nem az igazi....
Oké ezt még értem, de hogyan csatolok vissza az valahogy így:
a 2.elem 3'k'-t tartalmaz
a 3.elem 3 'k'-t tartalmaz...
h=0
z=[]
for elem in x:
z=':'.join(elem).count('k')
while (h<=len(x)):
h+=1
print(h,'adik elem: ',z,'darab 'k'-át tartalmaz')
De nem jó, valahogy nem jó
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Bocs, az előbb megnyomtam valamit véletlenül, és elment félkészen.
Most akkor listát akarsz eredményül vagy egymás alá írt mondatokat?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Ne kapkodj, itt az alapokkal vannak gondok. Ugyan a behúzások nem látszanak, de remélem a while a for cikluson kívül létezik. Bár még akkor sincs sok értelme.
Hibák:
- a z egy lista, amihez hozzáadjuk az elemeket, nem felülírjuk az értékét. z.append(...) parancs kéne neked, és úgy működne is a dolog
- while helyett elég egy for, de ez ízlés dolga, hf kérdésnél a tanár kérheti, hogy azt használd, viszont a z listán illene végigiterálnod, így len(x) helyett len(z) (hiába ugyanaz a mérete)
- a kiírásnál z értéke még mindig egy lista, neked a listaelemek kellenének (plusz figyelj a szintaxis hibáidra, idézőjel és aposztróf kell, ha 'k'-t akasz printtel kiíratni)
- emiatt gond, hogy a h értékét előbb növeled, mint lekérd a listaelemet, mivel ezzel fogsz hivatkozni rá: z[h] az első, második stb. elem a listában, de mivel 0-tól számol, te meg egytől, az elsőt lazán kihagyod, és az utolsó utánit próbálod lekérni a <= feltétel miatt.
A te kódod kicsit átalakítva:
h=0
z=[]
for elem in x:
....z=''.join(elem).count('k')
while (h<len(z)):
....print(h,'adik elem: ',z,"darab 'k'-t tartalmaz")
....h += 1
Ki kell írnom egy txt-be, minden olyan elemet ami legalább 2 'k'-t tartalmaz és ki kell elé írnom az eredeti állományból a cím sorszámát.
De ne tudom összehozni, a jó fenéért se...
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Oké, én is ügyes vagyok és kapkodtam. Helyesen:
h=0
z=[]
for elem in x:
....z.append(''.join(elem).count('k'))
while (h<len(z)):
....print(h,'adik elem:',z[h],"darab 'k'-t tartalmaz")
....h += 1
(Pontok csak a behúzás miatt.)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
Oké, nézzük fapadosan.
for elem in x:
.k_db = 0
.for i in elem:
..k_db += i.count('k')
.if k_db >= 2:
..print(elem)
Végigiterálsz a külső listán (x), majd a belső lista minden elemén. Egy segédváltozód lesz, mondjuk k_db, amiben a 'k'-k számát tárolod, minden kis lista előtt nullázod. A belső listák elemeiben megszámolod a 'k'-k előfordulását (count), ezt hozzáadod a segédváltozódhoz. Kilépsz a belső ciklusból, jön a feltételed, hogy akkor írja ki (fájlba, akárhová) az elemet, ha ez a k_db (ami már a belső lista összes 'k'-jának számát tartalmazza) legalább 2. A pontok a behúzást jelzik, a fájlba írást és a feladat sorszámának kiírását rád hagyom.
Elegánsabb egy ciklussal, amit a 80%-os válaszadó muatott. Ilyenkor a belső listákat összefűzöd (join), majd ebben a stringben számolod a 'k'-t (count), , és utána a feltétel ugyanaz. Mivel nem kell tárolnod sehol az értéket, ezt közvetlenül is berakhatod a feltételbe.
for elem in x:
.if (''.join(elem).count('k')) >= 2:
..print(elem)
A feltételnél a zárójel nem kell, de talán jobban elválik, mi tartozik egybe. ''.join(elem) fűzi össze a lista elemeit (és nem rak közéjük elválasztó karaktert), majd ebben a .count('k') számolja a k-kat.
Még elegánsabb listaértelmezéssel, mert akkor ez mindössze két sor (bár ezt a cím sorszáma az eredeti állományban dolgot nem tudom, micsoda):
with open('out.txt', 'w') as f:
.[print(elem,file=f) for elem in x if ''.join(elem).count('k') >= 2]
Az ügyön ez a cím sorszáma dolog bonyolíthat, és esetleg igényelhet egy while ciklust, de ehhez tudni kéne, mi van az eredeti állományban (vagy csak a feladat sorszáma kell, és akkor mindegy, egy újabb sor).
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!