Vinnaren i pepparkakshustävlingen!
2022-04-17, 22:56
  #1885
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Elekensa
Aha, så klart. Det blir bara onödigt när jag bara ska skriva ut en textrad.

Jag tycker python verkar så mycket mer logiskt än C# (som vi diskuterar i den nybörjartråden).
Python är betydligt enklare för en nybörjare.
Det är inte för inte som Python ofta används för att lära barn programmering.
Citera
2022-04-17, 23:20
  #1886
Moderator
Pontiac-Garages avatar
Citat:
Ursprungligen postat av Elekensa
Jag tycker python verkar så mycket mer logiskt än C# (som vi diskuterar i den nybörjartråden).

Python har en väldigt enkel och "ren" struktur då mängden kod hålls nere hela tiden, samt då man inte behöver sätta sig in i klasser/objektorientering direkt som i C#.

Men efter att du kodat ett tag kommer du se likheterna, då både Python och C# är objektorienterade språk.
Citera
2022-04-18, 13:13
  #1887
Medlem
Bonnatorps avatar
Kod:
prices = [10, 20, 30]
price_total = 0
for item in prices:
    price_total =+ item
price_average = price_total / len(prices)

print(price_average)

Varför printar denna kod 10, istället för 20?
Jag antog att len() skulle returnera längden för listan prices, som torde vara 3. Eller hur?
Citera
2022-04-18, 13:24
  #1888
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Kod:
prices = [10, 20, 30]
price_total = 0
for item in prices:
    price_total =+ item
price_average = price_total / len(prices)

print(price_average)

Varför printar denna kod 10, istället för 20?
Jag antog att len() skulle returnera längden för listan prices, som torde vara 3. Eller hur?
Skulle gissa att det är för att du vänt på += så att du bara tilldelar varje item istället för adderar och tilldelar. Då är price_average 30 efter loopen istället för 60.
Citera
2022-04-18, 14:14
  #1889
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av erkki17
Skulle gissa att det är för att du vänt på += så att du bara tilldelar varje item istället för adderar och tilldelar. Då är price_average 30 efter loopen istället för 60.
Så är det. Lätt hänt att vända på tecknen och "felvarianten" är syntaktiskt korrekt.
Citera
2022-04-18, 19:27
  #1890
Medlem
Bonnatorps avatar
Yes, svaren ovan stämde helt.
Klumpig jag.

Nu är jag nyfiken på metoden copy().
Exemplet jag sätt nämner att om du har en lista, numbers, så kan kopiera listan genom numbers2 = numbers.copy().
Men det lät som ett väldigt dåligt exempel då den metoden bara är överflödig i det fallet.

Vad är ett faktiskt användningsområde av den?
Citera
2022-04-18, 19:38
  #1891
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Bonnatorp
Yes, svaren ovan stämde helt.
Klumpig jag.

Nu är jag nyfiken på metoden copy().
Exemplet jag sätt nämner att om du har en lista, numbers, så kan kopiera listan genom numbers2 = numbers.copy().
Men det lät som ett väldigt dåligt exempel då den metoden bara är överflödig i det fallet.

Vad är ett faktiskt användningsområde av den?
Nej, den är inte överflödig.
Om du tar bort copy så delar bara samma referens till en lista i två variabler. Prova att ändra i listan så får du se. Utan copy så ändras listan på båda ställena.

Citat:
List copy using =

We can also use the = operator to copy a list. For example,

old_list = [1, 2, 3]
new_list = old_list
However, there is one problem with copying lists in this way. If you modify new_list, old_list is also modified. It is because the new list is referencing or pointing to the same old_list object
https://www.programiz.com/python-pro...hods/list/copy
__________________
Senast redigerad av Enterprise 2022-04-18 kl. 19:42.
Citera
2022-04-18, 20:02
  #1892
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Enterprise
Nej, den är inte överflödig.
Om du tar bort copy så delar bara samma referens till en lista i två variabler. Prova att ändra i listan så får du se. Utan copy så ändras listan på båda ställena.

https://www.programiz.com/python-pro...hods/list/copy
Fast om variabeln numbers2 = numbers sätts tidigare i exekveringsordningen än när numbers ändras så ändras väl inte numbers2 också?
T.ex.
Kod:
numbers = 10
numbers2 = numbers
numbers = 20
Det borde ju rimligen sätta numbers till 20 och numbers2 till 10.
Eller är Python verkligen så egensinnigt gjort att båda är 20 nu?
Så skulle ju aldrig vara fallet i C#.
Citera
2022-04-18, 20:05
  #1893
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Yes, svaren ovan stämde helt.
Klumpig jag.

Nu är jag nyfiken på metoden copy().
Exemplet jag sätt nämner att om du har en lista, numbers, så kan kopiera listan genom numbers2 = numbers.copy().
Men det lät som ett väldigt dåligt exempel då den metoden bara är överflödig i det fallet.

Vad är ett faktiskt användningsområde av den?

med copy() säkerhetställer du att du gör en kopia av objektet list() så att du kan manipulera den. Annars kan det hända att du ändrar båda listorna då två variabler kan peka på samma adressplats i minnet.

Du måste kopiera listor och dicts för att kunna manipulera dem när du itererar över dem. Python kommer att skrika om du försöker manipulera en lista eller dict samtidigt som att du itererar över elementen.
Citera
2022-04-18, 20:07
  #1894
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av Methos
med copy() säkerhetställer du att du gör en kopia av objektet list() så att du kan manipulera den. Annars kan det hända att du ändrar båda listorna då två variabler kan peka på samma adressplats i minnet.

Du måste kopiera listor och dicts för att kunna manipulera dem när du itererar över dem. Python kommer att skrika om du försöker manipulera en lista eller dict samtidigt som att du itererar över elementen.
Så numbers2 = numbers innebär att man skapar en extra variabel som delar minnesadress med den första variabeln?
Det låter ju helt barockt.
Är inte det en sådan där egenhet som folk säger att python är ett bristfälligt språk för?
Citera
2022-04-18, 20:11
  #1895
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Bonnatorp
Så numbers2 = numbers innebär att man skapar en extra variabel som delar minnesadress med den första variabeln?
Det låter ju helt barockt.
Är inte det en sådan där egenhet som folk säger att python är ett bristfälligt språk för?
Nej. Så funkar det i de flesta språk.
Du får läsa på skillnaden mellan value och reference.
Citera
2022-04-18, 20:22
  #1896
Medlem
Citat:
Ursprungligen postat av Enterprise
Nej, den är inte överflödig.
Om du tar bort copy så delar bara samma referens till en lista i två variabler. Prova att ändra i listan så får du se. Utan copy så ändras listan på båda ställena.

https://www.programiz.com/python-pro...hods/list/copy


Jag är inte riktigt säker på att denna referens är giltig i senare versioner av Python. För kolla min Ipython:

Kod:
In [2]: hus1 = ['A','B','C']

In [3]: hus2 = hus1

In [4]: hus2 = hus2 + ['D','E']

In [5]: hus2
Out[5]: ['A', 'B', 'C', 'D', 'E']

In [6]: hus1
Out[6]: ['A', 'B', 'C']


Som du ser har jag tilldelat hus2 samma adressplats som hus1, men hus1 ändras inte när jag tilldelar hus2 två nya element.

Inte heller om jag vänder på ordningen:

Kod:
In [27]: hus1 = hus1 +['E','D']

In [28]: hus1
Out[28]: ['A', 'B', 'C', 'E', 'D']

In [29]: hus2
Out[29]: ['A', 'B', 'C']

Kör vi däremot med dict() får vi intressanta resultat:

Kod:
In [15]: dict1 = {'d':2, 'c':3}

In [16]: dct2 = dict1

In [18]: dct2
Out[18]: {'d': 2, 'c': 3}

In [19]: dict1
Out[19]: {'d': 2, 'c': 3}

In [21]: dict1['d']=34

In [22]: dict1
Out[22]: {'d': 34, 'c': 3}

In [23]: dct2
Out[23]: {'d': 34, 'c': 3}


Nu ser vi att dct2 ändras om jag ändrar dict1.

Bonnatorp, ovan ser du vad som händer om man inte kopierar dict() ordentligt.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback