11 svar
86 visningar
anony123 behöver inte mer hjälp
anony123 163 – Fd. Medlem
Postad: 12 dec 2022 00:25

Begränsa förekomsten av varje element i en lista

Hur kan man se till att varje element i en lista bestående av listor förekommer exakt 2 gånger? Ett exempel:

from random import choice

ls = [1,2,3,4,5,6,7,8,9]
while len(ls) <= 10:
    ls.append(choice(ls))
    duplicate = [item for item in ls for i in range(2)]
    new_ls = [[choice(duplicate) for i in range(6)] for i in range(6)]

print(new_ls)
Laguna Online 30724
Postad: 12 dec 2022 11:12

Kan du beskriva med ord vad du vill göra? Din loop körs bara en gång, är det meningen?

anony123 163 – Fd. Medlem
Postad: 12 dec 2022 14:03
Laguna skrev:

Kan du beskriva med ord vad du vill göra? Din loop körs bara en gång, är det meningen?

Den ursprungliga listan innehåller 700 element men jag ville göra det tydligare. Den här koden kommer att skriva ut 6 listor inuti en lista och jag vill att varje siffra ska förekomma exakt 2 gånger i den "stora" listan (vilket inte är möjligt i just det här exemplet).

Laguna Online 30724
Postad: 12 dec 2022 14:19

Så l innehåller 700 olika tal, och resultatlistan ska innehålla hur många listor med hur många tal i varje?

anony123 163 – Fd. Medlem
Postad: 12 dec 2022 15:12

okej jag ska förtydliga: listan jag egentligen ska använda innehåller 700 ord, resten av koden stämmer alltså 6 listor med 6 ord i varje. 

Laguna Online 30724
Postad: 12 dec 2022 15:34

Så 18 av de talen ska finnas i de sex listorna, varje tal i två av listorna?

anony123 163 – Fd. Medlem
Postad: 12 dec 2022 15:41

Precis, bara att det är ord

Laguna Online 30724
Postad: 12 dec 2022 16:04

Du kan först plocka ut 18 element och lägga i en lista L. Håll reda på att det finns två exemplar av varje.

Välj sex element och lägg i en lista. Dra bort ett från deras antal, så nu finns det en av vissa och två av vissa.

Välj sex element till. Dra bort ett från deras antal. Nu kan det finnas noll av några, så ta bort dessa ur L.

Håll på så tills du har sex listor.

 

Jag kommer inte på nåt riktigt snyggt.

anony123 163 – Fd. Medlem
Postad: 12 dec 2022 17:29

Oj det låter som mycket kod, jag kom på en metod som borde funka: om man slicar listan med 36 ord mha en for loop och appendar en ny lista med dessa "dellistor" borde problemet vara löst. Men av någon anledning är t.ex brr[0] inte samma lista som arr[0:6] osv?

brr = []
arr = random.sample(duplicate, 36)

for i in range(0, 6):
    var = arr[(i * 6):((i+1) * 6)]
    brr.append(var)
anony123 163 – Fd. Medlem
Postad: 12 dec 2022 17:46

Det löste sig tack ändå!

Laguna Online 30724
Postad: 12 dec 2022 17:54

Ville du inte ha två av varje?

anony123 163 – Fd. Medlem
Postad: 12 dec 2022 17:59

jo det blir två av varje, jag borde ha haft med hela uppgiften så att det skulle bli mycket tydligare

Svara
Close