2016-11-11 1 views
3

Ich habe so etwas wie die folgende Auswahl treffen dieses:Randomly X Anzahl der Listen aus einer Liste von Listen

[pencil, pen] 

Ich fand das folgende von einer anderen Frage (geändert, um meiner Situation zu entsprechen).

import random 

pen = [1, 2, 3, 4] 
pencil = [2,3,4,5] 
paper = [3,4,5,6] 

group_of_items = [pen, pencil, paper] 

num_to_select = 2 
list_of_random_items = random.sample(group_of_items, num_to_select) 
print(list_of_random_items) 

Es gibt so etwas.

[[2, 3, 4, 5], [1, 2, 3, 4]] 

Also, es ist nah, aber keine Zigarre. Ich habe das auch gefunden.

import numpy as np 

pen = [1, 2, 3, 4] 
pencil = [2,3,4,5] 
paper = [3,4,5,6] 
group_of_items = [pen, pencil, paper] 
num_to_select = 2 

random_list = np.random.choice(group_of_items, num_to_select, replace=False) 

print(random_list) 

Aber es funktioniert nicht mit einer Liste von Listen (multi-dimensional).

Wie kann ich mein Ziel erreichen?

Oh, und ich möchte keine Wiederholungen.

Hinweis: meine Programmiererfahrung ist eher begrenzt. Ich kopiere und kopiere hauptsächlich, was ich online finde, mache nur kleine Änderungen.

Bearbeiten: Das obige ist einfach ein schnell zusammengewürfelter Test. Was ich gebaut habe, ist ein Twitter Tweet Bot mit PythonAnywhere. Es funktioniert wunderbar wie es ist, aber ich möchte eine zufällige Funktionalität hinzufügen.

Ich habe Listen von Tweets in einer Google-Tabelle, die mich auf eine Python-Liste ziehen über, etwa so:

quotes = tweet_sheet.col_values(3) 

ich mehrere Listen wie diese, die ich zusammen von Listen in einer Master-Liste setzen. Aber ich möchte nicht jedes Mal, wenn ich das Programm starte, von jeder Liste tweeten.

Momentan benutze ich so etwas.

sources = [tips,feed,quotes... etc... 

Ich möchte x Anzahl der Listen aus der Master-Liste der Listen auswählen, die verwendet werden, wenn das Programm ausgeführt wird. (Das ist irgendwie lustig formuliert)

Ich rate von den Kommentaren so weit, dass was ich oben habe funktionieren würde. Mit etwas mehr Optimierung des restlichen Codes.

+1

Wie ist das Ergebnis nicht das, was Sie wollen? Listen drucken die Variablennamen nicht. –

+0

Können Sie ein Beispiel für die gewünschte Ausgabe geben? –

+1

Wenn Sie keine Daten auf String-Ebene verarbeiten, können Sie dies nicht tun. –

Antwort

2

Hier wird ein Ansatz verwendet Wörterbücher:

>>> pen = [1, 2, 3, 4] 
>>> pencil = [2,3,4,5] 
>>> paper = [3,4,5,6] 
>>> item_dict = {'pen':pen, 'pencil':pencil, 'paper':paper} 
>>> import random 
>>> item_names = list(item_dict.keys()) 
>>> item_names 
['pencil', 'pen', 'paper'] 
>>> sample = random.sample(item_names,2) 
>>> sample 
['pencil', 'pen'] 
>>> item_dict[sample[0]] 
[2, 3, 4, 5] 
>>> item_dict[sample[1]] 
[1, 2, 3, 4] 

Sie und Listen So, jetzt eine Verbindung zwischen Saiten haben:

>>> "The first list sampled was {}. Here's the list {}".format(sample[0], item_dict[sample[0]]) 
"The first list sampled was pencil. Here's the list [2, 3, 4, 5]" 
>>> 
+0

Sehr schön. Aus den Kommentaren denke ich nicht, dass ich diese Spezifität benötige, aber es ist ein schönes, sauberes Beispiel, das jemandem in der Zukunft helfen könnte. Danke, dass du es zusammengestellt hast. –