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)
Kan du beskriva med ord vad du vill göra? Din loop körs bara en gång, är det meningen?
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).
Så l innehåller 700 olika tal, och resultatlistan ska innehålla hur många listor med hur många tal i varje?
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.
Så 18 av de talen ska finnas i de sex listorna, varje tal i två av listorna?
Precis, bara att det är ord
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.
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)
Det löste sig tack ändå!
Ville du inte ha två av varje?
jo det blir två av varje, jag borde ha haft med hela uppgiften så att det skulle bli mycket tydligare