Kezdőoldal » Közoktatás, tanfolyamok » Házifeladat kérdések » Pythonban ha egy lista elemei...

Rionen kérdése:

Pythonban ha egy lista elemei listák és, hogy a viharba lehet megtudni, hogy a lista elemek mennyit tartalmaznak egy bizonyos elemből?

Figyelt kérdés

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....



2016. máj. 6. 09:29
1 2 3
 11/22 A kérdező kommentje:

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...

2016. máj. 6. 18:00
 12/22 A kérdező kommentje:

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ó

2016. máj. 6. 18:10
 13/22 anonim ***** válasza:

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?

2016. máj. 6. 18:29
Hasznos számodra ez a válasz?
 14/22 anonim ***** válasza:

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

2016. máj. 6. 18:37
Hasznos számodra ez a válasz?
 15/22 A kérdező kommentje:

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...

2016. máj. 6. 18:38
 16/22 anonim ***** válasza:

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.)

2016. máj. 6. 18:41
Hasznos számodra ez a válasz?
 17/22 anonim ***** válasza:
Minden stringet, amit két 'k'-t tartalmaz, vagy minden listát, ami legalább kettőt? Nem mindegy, ha egyedileg kellenek a stringek, a join-t felejtsd el, használj beágyazott for ciklusokat.
2016. máj. 6. 18:46
Hasznos számodra ez a válasz?
 18/22 A kérdező kommentje:
Minden lista ami legalább kettőt.
2016. máj. 6. 19:00
 19/22 anonim ***** válasza:

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).

2016. máj. 6. 19:42
Hasznos számodra ez a válasz?
 20/22 A kérdező kommentje:
Kedves #19 a fapados verzióban, honnan derül ki, hogy minden új kis lista előtt nullázom a számlálót. Mert valóban nullázódik csak nem értem miért.
2016. máj. 6. 20:33
1 2 3

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!