2011-09-27 15 views
19

मैंने कुछ गिनती ली है और यह एनपायथन: एन संख्याओं की सूची कैसे बनाएं और यादृच्छिक रूप से किसी भी संख्या का चयन करें?

पर वापस आ गया है, अब मैं एक सूची चाहता हूं, जिसमें 0 से एन संख्याएं हों। उदाहरण: एन = 5 तो, count_list = [1, 2, 3, 4, 5]

कैसे मुझे लगता है कि ऐसा करने में सक्षम हो सकता है?

इसके अलावा, एक बार मैंने सूची बनाई है, मैं यादृच्छिक रूप से उस सूची से एक संख्या का चयन करना चाहता हूं और उस नंबर का उपयोग करना चाहता हूं। उसके बाद मैं सूची की शेष संख्या (एन -1) से एक और नंबर चुनना चाहता हूं और फिर इसका भी उपयोग करूँगा। यह इस पर जाता है कि सूची खाली है। क्या कोई मेरी मदद कर सकता है? धन्यवाद

+0

आपकी सूची एन 1 से होता है, शून्य एन –

+0

के माध्यम से कितना बड़ा आप एन होने की उम्मीद नहीं है? 10? 10^8? यह मायने रखता है; प्रदान किए गए सभी उत्तरों ओ (एन) अंतरिक्ष जटिलता मानते हैं ... क्या आप वाकई यह चाहते हैं? आपके प्रश्न में आप यह कहने में काफी स्पष्ट हैं कि "अब मैं एक सूची चाहता हूं", लेकिन मैं यह सुनिश्चित करना चाहता था कि आपको इसका एहसास हुआ कि इसका क्या अर्थ है। –

+0

मैंने कभी गहराई से सोचा नहीं। मैं वास्तव में एक सूची की तलाश कर रहा था जहां एन अधिकतम 20 से 30 है। लेकिन चूंकि आपने इसका उल्लेख किया है, मेरे लिए एक सीखने का अभ्यास के रूप में, क्या आप कृपया निम्नलिखित में मेरी सहायता कर सकते हैं: 1. ओ (एन) अंतरिक्ष जटिलता क्या है? 2, क्या होता है जब मेरी सूची लगभग 10^8 – Sunny

उत्तर

30

आप ऐसा ही कुछ द्वारा तत्वों की गणना बना सकते हैं:

import random 
... 
random.choice(mylist) 

संपादित करें:

mylist = list(xrange(10)) 

तो आप अपने आइटम का चयन करने random.choice समारोह का उपयोग कर सकते

असिम इहसान ने सही ढंग से कहा है, मेरा उत्तर अभी तक ओपी की पूरी समस्या का समाधान नहीं करता है। सूची से मान निकालने के लिए बस list.remove() कहा जा सकता है:

import random 
... 
value = random.choice(mylist) 
mylist.remove(value) 
7

आप इस कोड

import random 
N = 5 
count_list = range(1,N+1) 
random.shuffle(count_list) 

while count_list: 
    value = count_list.pop() 
    # do whatever you want with 'value' 
+1

'count_list:' यह जांचने के लिए पर्याप्त है कि 'count_list' खाली सूची नहीं है ... – eumiro

0

सूची (संपादित) बनाएं कोशिश कर सकते हैं:

import random 
random.choice(count_list) 
+0

'x x (x) में x के लिए x = 1 == रेंज (1, एन + 1)' –

+0

@ लार्समैन पहला सूची बनाता है, आखिरी - एक इटरेटर –

+0

मैंने 'रेंज' का उपयोग करने के लिए अपनी टिप्पणी संपादित की। –

1

पहले भाग के रूप में:

count_list = range(1, N+1) 

यादृच्छिक तत्व का चयन करें

>>> N = 5 
>>> count_list = [i+1 for i in xrange(N)] 
>>> count_list 
[1, 2, 3, 4, 5] 
>>> 

दूसरे का सवाल है, इस पढ़ें: http://docs.python.org/library/random.html

>>> from random import choice 
>>> a = choice(count_list) 
>>> a 
1 
>>> count_list.remove(a) 
>>> count_list 
[2, 3, 4, 5] 

सामान्य उपाय दिया गया है।

वैसे, आप भी इस पढ़ने में रुचि हो सकती है:

http://code.activestate.com/recipes/59883-random-selection-of-elements-in-a-list-with-no-rep/

तेजी से यादृच्छिक चयन के कुछ ही कार्यान्वयन कर रहे हैं।

1

आप सामान की गिनती करने की जरूरत नहीं है अगर आप एक यादृच्छिक तत्व लेने के लिए चाहते हैं। बस random.choice() उपयोग करें और अपनी iterable पारित:

import random 
items = ['foo', 'bar', 'baz'] 
print random.choice(items) 

आप वास्तव में उन्हें गिनती करने के लिए है, तो random.randint(1, count+1) का उपयोग करें।

1

आप उपयोग कर सकते हैं:

import random 
random.choice(range(n)) 

या:

random.choice(range(1,n+1)) 

अगर आप 0 से 1n करने के लिए और नहीं से यह चाहते हैं।

1

इसके बाद मैं सूची की शेष संख्या (एन -1) से एक और नंबर चुनना चाहता हूं और फिर इसका भी उपयोग करना चाहता हूं।

तो फिर तुम यकीनन नहीं वास्तव में सिर्फ एक (उठा के प्रयोजन के लिए 1 से एन के नंबरों की सूची बनाने के लिए क्यों सिर्फ़ स्पष्ट है कि सीमा सीधे में एक यादृच्छिक संख्या के लिए पूछ नहीं, बजाय करने के लिए इसे बनाने चाहते हैं से चुनें?), लेकिन इस तरह की एक सूची को बदलने के बजाय। सौभाग्य से, random मॉड्यूल आपने इसके लिए भी कवर किया है: बस random.shuffle का उपयोग करें।

बेशक, यदि आपके पास संख्याओं की एक बड़ी सूची है और आप केवल कुछ आकर्षित करना चाहते हैं, तो यह निश्चित रूप से random.choice का उपयोग करके प्रत्येक को आकर्षित करने और इसे हटाने के लिए समझ में आता है।

लेकिन ... आप किसी श्रेणी से संख्याओं का चयन क्यों करना चाहते हैं, जो कुछ वस्तुओं की गणना के अनुरूप है? क्या आप वस्तुओं में से किसी एक को चुनने के लिए संख्या का उपयोग करने जा रहे हैं? ऐसा मत करो; यह चीजों को बहुत जटिल बनाने के आपके रास्ते से बाहर जा रहा है। यदि आप किसी एक आइटम का चयन करना चाहते हैं, तो random.choice के साथ फिर से ऐसा करें।

0

मैटैन set और यादृच्छिक रूप से उठाए गए तत्व को हटाएं (choice के साथ) जब तक कि सूची खाली न हो।

s=set(range(1,6)) 
import random 

while len(s)>0: 
    s.remove(random.choice(list(s))) 
    print(s) 

तीन रन पर तीन अलग अलग annswers

देना
>>> 
set([1, 3, 4, 5]) 
set([3, 4, 5]) 
set([3, 4]) 
set([4]) 
set([]) 
>>> 
set([1, 2, 3, 5]) 
set([2, 3, 5]) 
set([2, 3]) 
set([2]) 
set([]) 

>>> 
set([1, 2, 3, 5]) 
set([1, 2, 3]) 
set([1, 2]) 
set([1]) 
set([]) 
संबंधित मुद्दे