2016-06-10 9 views
2

Ich versuche, zwei Teams zu 8 Personen von 8 Menschen aus 16 Teams zuweisen,Weisen Zufalls Team aus 16 Teams in eine zufällige Person von 8 Personen

Hier ist, was ich habe:

import random 

persons = ['Name', 'Name', 'Name', 'Name', 'Name', 'Name', 'Name', 'Name'] 

teams = ['France', 'Switzerland', 'England', 'Slovakia', 'Germany', 'Ukraine', 'Spain', 'Czech Republic', 'Croatia', 'Italy', 'Republic of Ireland', 'Sweeden', 'Russia', 'Wales', 'Belgium'] 

combinations = {p: random.choice(teams) for p in persons} 

Das Ergebnis:

import random  
person = ['Ashton', 'Danny', 'Martin', 'Yves', 'Nick', 'Cormac', 'Thierry', 'Ciaran']  
team = ['France', 'Switzerland', 'England', 'Slovakia', 'Germany', 'Ukraine', 'Spain', 'Czech Republic', 'Croatia', 'Italy', 'Republic of Ireland', 'Sweden', 'Russia', 'Wales', 'Belgium']  
namesTeams = {}  
for x in person:  
    teamName = team[random.randint(0, len(team) -1)]  
    namesTeams[x] = teamName  
    team.remove(teamName)  
print(namesTeams) 

Antwort

2

Dies kann mit random.choice([List])

Beispiel durchgeführt werden ist ein Wörterbuch.

Wenn Sie Dubletten vermeiden möchten, müssen Sie über die Liste iterieren.

combinations = {} 
for p in persons: 
    team = random.choice(teams) 
    combinations[p] = team 
    teams.remove(team) 
+0

Ja, das funktioniert für python3 und python2.7 – Erich

+1

Es gibt einen Tippfehler in Ihrem Code, es ist 'teams', nicht' team'. Darüber hinaus wird dies beispielsweise nur ein Ergebnis "{'Name": "Ukraine"} ergeben. –

+0

Danke, ich korrigierte den Tippfehler. Nein, das wird ein Wörterbuch erstellen, das jedem Namen ein zufälliges Team zuweist. – Erich

0

Verwenden Sie random.choice(). In Ihrem Fall könnten Sie folgende:

import random 
names = ['Name1', 'Name2', 'Name3'] 
teams = ['France', 'Switzerland', 'England', 'Slovakia', 'Germany', 'Ukraine', 'Spain', 'Czech Republic', 'Croatia', 'Italy', 'Republic of Ireland', 'Sweeden', 'Russia', 'Wales', 'Belgium'] 
people = [] 

for name in names: 
    people.append(random.choice(names), random.choice(teams)) 

people wird eine Liste von Tupeln aus einem Namen und einem Team sein.

+1

Dadurch wird nur eine Kombination erstellt, und für alle Personen ist eine Kombination erforderlich. –

0

Dadurch entsteht ein Wörterbuch mit Namen Teams angebracht, ohne Duplikate

import random 

person = ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8'] 
team = ['France', 'Switzerland', 'England', 'Slovakia', 'Germany', 'Ukraine', 'Spain', 'Czech Republic', 'Croatia', 'Italy', 'Republic of Ireland', 'Sweden', 'Russia', 'Wales', 'Belgium'] 
namesTeams = {} 

for x in person: 
    teamName = team[random.randint(0, len(team) - 1)] 
    namesTeams[x] = teamName 
    team.remove(teamName) 

print(namesTeams) 
1

Also das, was Sie zu tun versuchen ist nur zufällig auswählen „die Länge der names“ Elemente aus teams. In diesem Fall sollten Sie random.sample() verwenden:

>>> import random 
>>> person = ['Name', 'Name', 'Name', 'Name', 'Name', 'Name', 'Name', 'Name'] 
>>> team = ['France', 'Switzerland', 'England', 'Slovakia', 'Germany', 'Ukraine', 'Spain', 'Czech Republic', 'Croatia', 'Italy', 'Republic of Ireland', 'Sweeden', 'Russia', 'Wales', 'Belgium'] 

>>> random.sample(team, len(person)) 
['Ukraine', 'Russia', 'England', 'Croatia', 'France', 'Spain', 'Italy', 'Wales'] 

Von the documentation:

random.sample(population, k)

Return eine k Länge Liste der einzigartigen Elemente aus der Bevölkerung Sequenz gewählt oder eingestellt. Wird für Stichproben ohne Ersatz verwendet.

Gibt eine neue Liste mit Elementen aus der Population zurück, während die ursprüngliche Population unverändert bleibt. Die resultierende Liste ist in der Reihenfolge der Auswahl, so dass alle Unter-Slices auch gültige Stichproben sind. Auf diese Weise können die Gewinner der Tombola (das Sample) in Gewinner des Hauptpreises und des zweiten Platzes (die Subslices) aufgeteilt werden.


Wenn Sie pro Person zwei Teams zuweisen möchten, würde ich Ihnen random.shuffle() die team Liste vorschlagen, spaltete dann die Liste in zwei große Stücke, und das Ergebnis in einem Wörterbuch setzen:

{person: two_teams for person, two_teams in 
        zip(people, [team[i:i+2] for i in range(0, len(team), 2)])} 
Verwandte Themen