मैं एक कार्यक्रम है जहाँ मैं विभिन्न चीजों की सफलता का ट्रैक रखने कर रहा हूँcollections.Counter
का उपयोग कर - एक बात से प्रत्येक सफलता वेतन वृद्धि इसी काउंटर: भविष्य परीक्षण के लिएमैं पाइथन काउंटर क्लास से भारित यादृच्छिक पिक कैसे प्राप्त कर सकता हूं?
import collections
scoreboard = collections.Counter()
if test(thing):
scoreboard[thing]+ = 1
फिर, मैं चाहता हूँ चीजों की ओर बढ़ने के लिए जिसने सबसे अधिक सफलता उत्पन्न की है। Counter.elements()
इसके लिए आदर्श लग रहा था, क्योंकि यह तत्वों (मनमाने ढंग से क्रम में) को वापस देता है, गिनती के बराबर कई बार दोहराया जाता है। तो मैं सोचा मैं सिर्फ कर सकता है:
import random
nextthing=random.choice(scoreboard.elements())
लेकिन नहीं, कि लेखन त्रुटि को जन्म देती है: प्रकार की वस्तु 'itertools.chain' कोई लेन() है। ठीक है, तो random.choice
can't work with iterators। लेकिन, इस मामले में, लंबाई ज्ञात (या जानकार) है - यह sum(scoreboard.values())
है।
मुझे अज्ञात लंबाई की सूची और यादृच्छिक रूप से एक तत्व चुनने के लिए मूल एल्गोरिदम पता है, लेकिन मुझे संदेह है कि कुछ और सुरुचिपूर्ण है। मुझे यहाँ क्या करना चाहिए?
कैसे सिर्फ मोड़ के बारे में एक सूची में 'scoreboard.elements()'? – delnan
@ डेलनान - नीचे [लार्क्स के उत्तर] (http://stackoverflow.com/a/9084700/479426) पर टिप्पणी देखें। – mattdm