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ó
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?
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...
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.)
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 © 2024, 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!