Meg tudom ezt írni egy sorban Pythonban?
for szam in lista:
---if szam < x:
------lista.remove(szam)
Csak kérdés.. :)
Az #5-9 megoldások nem egy új listát kreálnak? A lista.remove() pedig a meglévőt módosítja?
#11: Új listát hoz létre, de alkalmazható a meglevő módosítására
lista = [szam for szam in lista if szam >= x]
illetőleg:
lista = list(filter(lambda szam : szam >= x, lista))
Hiába állítod be a lista változó értékét az új listára, attól az még egy másik lista, nem?
Pythonhoz nem értek, de egyéb nyelveken nagyon nem mindegy. Pl ha valahol máshol van egy "referencia" az adott listára, akkor így nem fog működni.
Hű, ezen most én is elgondolkodtam. :)
Elvileg a Pythonban minden objektum. A lista is, az elemek is. Ha magára a listára hivatkozok, akkor az felülíródik, de a rá való hivatkozás nem változik. A lista objektum belül talán másik memóriaterületre mutat, de a "kívülről" rá való hivatkozást ez nem befolyásolja.
Az elemek pedig ugyancsak hivatkozások, amik az eredeti tartalomra mutatnak továbbra is.
(?)
A python interaktív shelljét használva:
>>> lista = [1,2,3,4,5,6]
>>> x= 3
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'x': 3, '__name__': '__main__', 'lista': [1, 2, 3, 4, 5, 6], '__doc__': None}
>>> lista = list(filter(lambda szam : szam >= x, lista))
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, 'x': 3, '__name__': '__main__', 'lista': [3, 4, 5, 6], '__doc__': None}
Szóval a parancs kiadása után nem jön létre új változó, hanem a régit írja felül.
#16: és ezt most mért írtad, nyilván a lista nevű változóból egy van
Az a kérdés, hogy ekkor mi történik? Más nyelvekben iylenkor a lista2 marad 6 elemű, míg ha magából a listából veszed ki az elemeket akkor mindkét lista 4 elemű lesz.
lista = [1,2,3,4,5,6]
lista2 = lista
x= 3
globals()
lista = list(filter(lambda szam : szam >= x, lista))
globals()
Ezt úgy lenne érdemes kipróbálni, hogy a lista elemei "explicit" objektumok, hogy jobban lássuk, hogy pl. a lista és a lista2 adott eleme ugyanaz-e, vagy két külön objektum.
Na, közben ki is próbáltam: A lista hivatkozott objektumai ugyanazok maradnak.
Kicsit olyan, mint a shallow copy? :)
----
class C():
__def __init__(self,x):
____self.x = x
o1=C(1)
o2=C(2)
lista = [o1,o2]
lista2 = lista
print(lista2)
print(lista)
lista = list(filter(lambda elem : elem.x <= 1, lista))
print(lista2)
print(lista)
----
[<__main__.C object at 0xb70ab94c>, <__main__.C object at 0xb70abb6c>]
[<__main__.C object at 0xb70ab94c>, <__main__.C object at 0xb70abb6c>]
[<__main__.C object at 0xb70ab94c>, <__main__.C object at 0xb70abb6c>]
[<__main__.C object at 0xb70ab94c>]
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!