2017-07-31 67 views
0

目前我的代碼返回客戶端的名稱和visit_length的隨機值。我想它返回客戶名稱,然後從visit_length一個或多個元素,即("Client 1", 15, 45), ("Client 2", 45, 60), ("Client 3", 30)如何從列表中返回一個或多個項目?

N = 20  
randomitems = [] 
visit_length = [15, 30, 45, 60] 
value_range = np.arange(0, N, 1) 

for i in value_range: 
    visits = ("Client %d" % i, random.choice(visit_length)) 
    randomitems.append(visits) 

有什麼建議?我想隨機庫裏可能有些東西,但我還沒有找到任何東西。

謝謝!

+0

如果'N'是20,你沒有從'visit_length' –

+1

足夠的唯一值好像你想要做的是另一種產生隨機數的東西,決定你要多少選擇要添加到項目。 – Fydo

+0

我不明白你在問什麼。 – mkrieger1

回答

2

選擇一個隨機數k的項目追加random.randint,然後從visit_lengthrandom.sample中獲取該元素的數量。

import random 
import numpy as np 

N = 20 
randomitems = [] 
visit_length = [15, 30, 45, 60] 
value_range = np.arange(0, N, 1) 

for i in value_range: 
    k = random.randint(1, len(visit_length)) 
    visits = ("Client %d" % i,) + tuple(sorted(random.sample(visit_length, k=k))) 
    randomitems.append(visits) 

如果你想允許重複項目:

import random 
import numpy as np 

N = 20 
MAX_VISIT_LENGTHS = 4 # You can choose as many as you want now I guess 
randomitems = [] 
visit_length = [15, 30, 45, 60] 
value_range = np.arange(0, N, 1) 

for i in value_range: 
    k = random.randint(1, MAX_VISIT_LENGTHS) 
    vs = sorted(random.choice(visit_length) for _ in range(k)) 
    # If you do not want to sort use 
    # vs = [random.choice(visit_length) for _ in range(k)] 
    visits = ("Client %d" % i,) + tuple(vs) 
    randomitems.append(visits) 
+0

如果我希望它也可以選擇多次返回相同的值,那麼該怎麼辦?例如(「客戶端1」15,15,30,15) – plshelp

+0

@plshelp我已經更新了答案。請注意,在這種情況下,您可以選擇任意數量的元素進行追加(變量MAX_VISIT_LENGTHS)。 – jdehesa

+0

值是否必須按順序排序?我寧願它是一個混合列表。 – plshelp

1

更新答案返回元組

我可能誤會了你想要的,但這裏是我對這個問題: 我們創建一個函數,它從列表x中返回隨機數量的項目(在1-4 = N之間),並以隨機順序返回它們。

import random 

def visits_func(): 
    N = random.randint(1, 4) 
    x = [15, 30, 45, 60] 
    y = [] 
    while N: 
     y.append(x.pop(random.randrange(len(x)))) 
     N -= 1 
    return y 

value_range = range(1,6) #1,2,3,4,5,6 

randomitems = [] 

for i in value_range: 
    visits = tuple(["Client %d" % i] + sorted(visits_func())) 
    randomitems.append(visits) 

打印,例如,

[('Client 1', 15, 60), 
('Client 2', 15), 
('Client 3', 45, 60), 
('Client 4', 30, 60), 
('Client 5', 15, 30, 45)] 
+0

很好的解決方案來追加* popped()* vlaue!給予好評!我不認爲你在這裏使用'numpy',所以你可以取出進口... –

+0

@JoeIddon正確,在某些時候使用numpy,但被刪除。更新了答案。 –

相關問題