मैं एक एल्गोरिदम लिखने की कोशिश कर रहा हूं जो क्रम में अनुक्रम के आकार को जानने के बिना यादृच्छिक रूप से अनुक्रम से एन विशिष्ट आइटम चुनता है, और जहां इसे फिर से शुरू करना महंगा होता है अनुक्रम एक से अधिक बार। उदाहरण के लिए, अनुक्रम के तत्व एक विशाल फ़ाइल की रेखा हो सकते हैं।अज्ञात लंबाई के अनुक्रम से यादृच्छिक रूप से एन आइटम उठाएं
मैं एक समाधान पाया है जब एन = 1 (जो है, जब एक विशाल अनुक्रम से यादृच्छिक पर ठीक एक तत्व लेने की कोशिश कर रहा):
import random
items = range(1, 10) # Imagine this is a huge sequence of unknown length
count = 1
selected = None
for item in items:
if random.random() * count < 1:
selected = item
count += 1
लेकिन मैं अन्य मूल्यों के लिए एक ही बात कैसे प्राप्त कर सकते हैं एन (कहते हैं, एन = 3)?
नहीं प्रश्न पूछा करने के लिए एक जवाब का प्रयोग करेंगे, लेकिन ध्यान दें निर्मित संग्रह (और कई अन्य) तुम सिर्फ कर सकते हैं [ 'random.sample (your_collection, एन) के लिए है कि' ] (https://docs.python.org/2/library/random.html#random.sample)। –