2010-04-06 10 views
7

मैं स्ट्रिंग से यादृच्छिक अक्षरों को टुकड़ा करना चाहता हूं।पायथन: प्रतिस्थापन के बिना तत्व चुनना

को देखते हुए रों = "कैसे हो"

मैं 'एस' के बिना प्रतिस्थापन से तत्वों लेने लेकिन इंडेक्स नंबर रखना चाहते हैं।

उदाहरण के लिए

>>> random.sample(s,len(s)) 
['w', 'h', 'o', 'd', 'y'] 

जो मैं चाहता के करीब है, लेकिन मैं वास्तव में की तरह कुछ पसंद करेंगे

[('w', 2), ('h', 0), (' ओ ', 1), (' डी ', 3), (' वाई ', 4)]

पत्र-सूचकांक जोड़े के साथ। यह महत्वपूर्ण है क्योंकि एक ही पत्र एक से अधिक बार 'में दिखाई देता है। यानी) "पत्र" जहां 'टी' दो बार प्रकट होता है लेकिन मुझे दूसरे से पहले 'टी' को अलग करने की आवश्यकता होती है।

आदर्श रूप में मुझे वास्तव में केवल अक्षर बनाने/चुनने की आवश्यकता होती है क्योंकि मुझे उनकी आवश्यकता होती है लेकिन सभी अक्षरों को एक बार में स्कैम्बल करना और गणना करना (यानी: ऊपर दिखाए गए सूची में) ठीक है।

उत्तर

16
>>> random.sample(list(enumerate(a)), 5) 
[(1, 'o'), (0, 'h'), (3, 'd'), (2, 'w'), (4, 'y')] 
8

तुम सिर्फ नमूना से पहले सूची की गणना कर सकते हैं:

>>> random.sample(list(enumerate(l)), 5) 
[(1, 'o'), (2, 'w'), (0, 'h'), (3, 'd'), (4, 'y')] 
3

यह शायद इस तरह कुछ करने के लिए आसान है:

def sample_with_indices(s): 
    indices = range(len(s)) 
    random.shuffle(indices) 
    return [(s[i], i) for i in indices] 

यह मूल रूप से एक स्ट्रिंग के लिए सभी सूचकांकों शफ़ल जाएगा और तो बस उस सूचकांक पर चरित्र वापस करें। चरित्र से सूचकांक में जाकर थोड़ा और मुश्किल है।

+1

मैं कुछ समान सुझाव देने जा रहा था, लेकिन आपको उपरोक्त 'सूची (एन्युमेरेट्स) की चाल का उपयोग करना चाहिए: 'यादृच्छिक। शफल (सूची (गणना))' ​​ – jemfinch

+0

हाँ, केवल लाभ यह वास्तव में प्रदान करता है कि यदि आप इसके बजाय कुछ इंडेक्स चुनना चाहते हैं तो आप किस सूचकांक का उपयोग करना चाहते हैं और फिर आप इसे अंतिम दो पंक्तियों के बाद कर सकते हैं। –

संबंधित मुद्दे