Meddelande

Du befinner dig just nu på en äldre version av Pluggakuten, gamla.pluggakuten.se. Nya Pluggakuten lanserades den 6 februari 2017 och du finner forumet på www.pluggakuten.se.

På gamla.pluggakuten.se kan du fortfarande läsa frågorna och svaren som ställts, men du kan inte skapa ett nytt konto eller nya trådar. Nya frågor och nytt konto skapar du på det nya forumet, välkommen dit!

En kod med Python

wow_08
Medlem

Offline

Registrerad: 2016-02-16
Inlägg: 52

En kod med Python

Hej!

Kan någon hjälpa mig med följande kod som finns att hitta i en gammal tenta? Den är svår

Skriv en funktion deleteShort, som tar en lista som argument samt ett heltal. Funktionen uppdaterar listan så att varje element, som också är en lista, kortare än eller lika med heltalet raderas. Man får inte använda inbyggda funktioner eller metoder för strängoperationer. Dock går det att använda len och range, samt in.

Alltså:

>> ls=[[1],[],[2,3],[],[4,5,6],[]]   
>> deleteShort(ls,1)
>> ls
[[2,3],[2,5,6]]

Tack på förhand!

 
xam
Medlem

Offline

Registrerad: 2016-10-03
Inlägg: 44

Re: En kod med Python

Kod:

ls=[[1],[],[2,3],[],[4,5,6],[]]

def deleteShort(ls, heltal):

    new = []


    for echList in ls:


        if echList <= [heltal]:
            pass
    
        else:
            new.append(echList)
            
    print new
        

deleteShort(ls,1)    #Startar funktionen

Svår uppgift. Snällt av dem som hopfogade tentan att också inkludera "in" funktionen som ett alternativ. Menar; blev ju säkert en stor hjälp för gossarna som skrev provet. tongue
Jag postar i alla fall en "lösning" med en for-loop och annat  (kanske hjälper dig på traven..vem vet).

Senast redigerat av xam (2016-12-01 12:42)

 
annlu
Medlem

Offline

Registrerad: 2016-11-02
Inlägg: 58

Re: En kod med Python

Om jag förstått uppgiften rätt så ska funktionen deleteShort() modifiera ls direkt. Jag tolkar det så eftersom wow_08 har skrivit följande:

wow_08 skrev:

>> ls=[[1],[],[2,3],[],[4,5,6],[]]   
>> deleteShort(ls,1)
>> ls
[[2,3],[2,5,6]]

Vi passerar alltså listan ls och ett heltal num till deleteShort. Funktionen gör sedan sitt jobb med att ta bort de korta listelementen. Eftersom ingen ny lista returneras men ls ändå har ändrats efter funktionsanropet måste det betyda att deleteShort() modifierar ls direkt (vilket fungerar eftersom listor är mutable objekt).

I xams lösning förblir ls oförändrad efter funktionsanropet eftersom det rätta resultatet sparas i den nya listan new inne i funktionens scope.


Här är mitt förslag på en lösning:

Kod:

def deleteShort(ls, num):
    # Sparar de index där ls har kortare eller lika stora listelement som num
    index_to_delete = [] 
    for i in range(len(ls)):
        if len(ls[i]) <= num:
            index_to_delete.append(i)
    # Reverse så vi kan ta bort elementen bakifrån
    index_to_delete = index_to_delete[::-1]
    for i in index_to_delete:
        del ls[i]

>> ls = [[1], [], [2, 3], [], [4, 5, 6], []]
>> deleteShort(ls, 1)
>> ls
[[2,3],[2,5,6]]

Det jag tycker är svårt är att inte få använda inbyggda funktioner. Om list.append() är otillåtet kan man byta den raden till

Kod:

index_to_delete += [i]

Men om del är otillåtet vet jag inte hur man ska ta bort element ur ls. Alla typer av modifieringar av ls (som list comprehension, slicing) skapar en ny lista som alltså inte påverkar ls i det yttre scopet. Någon som har en lösning på det? Eller har jag tolkat uppgiften för strikt?

 
wow_08
Medlem

Offline

Registrerad: 2016-02-16
Inlägg: 52

Re: En kod med Python

Tack så mycket till er båda! Hjälpte jättemycket!

 


Sidfot

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

Powered by Mattecentrum
 |  Denna sida använder cookies |  Kontakta oss |  Feedback |