2011-05-30 7 views
6

मैं एक प्रोग्राम लिख रहा हूं और मुझे string एस के अक्षरों को list से अजगर में स्क्रैबल करने की आवश्यकता है। उदाहरण के लिए मैं की तरह string के list रों है:क्या अजगर में तारों को धक्का देने के कोई तरीके हैं?

l = ['foo', 'biology', 'sequence'] 

और मैं कुछ इस तरह हैं:

l = ['ofo', 'lbyoogil', 'qceeenus'] 

यह करने के लिए सबसे अच्छा तरीका क्या है?

आपकी मदद के लिए धन्यवाद! आप

>>> import random 
>>> x = "sequence" 
>>> l = list(x) 
>>> random.shuffle(l) 
>>> y = ''.join(l) 
>>> y 
'quncesee' 
>>> 

इस से कर सकते हैं एक समारोह का निर्माण आप क्या चाहते करने के लिए:

+0

http://stackoverflow.com/questions/1735561/oneliner-scramble-program – trutheality

उत्तर

18

अजगर .. शामिल बैटरी है

>>> from random import shuffle 

>>> def shuffle_word(word): 
... word = list(word) 
... shuffle(word) 
... return ''.join(word) 

एक सूची समझ एक आसान तरीका एक नई सूची बनाने के लिए है:

>>> L = ['foo', 'biology', 'sequence'] 
>>> [shuffle_word(word) for word in L] 
['ofo', 'lbyooil', 'qceaenes'] 
+4

+1 बैटरी शामिल! सावधान वे नियमित 9वीं भी नहीं हैं। –

+0

एक सूची समझ हमेशा सर्वोत्तम दृष्टिकोण नहीं हो सकती है, जनरेटर अभिव्यक्ति या मैपिंग बेहतर हो सकती है। मैं यह उदाहरण, मैं 'मानचित्र()' के लिए जाना होगा। – Johnsyweb

2

आप random.shuffle उपयोग कर सकते हैं।

4
import random 

words = ['foo', 'biology', 'sequence'] 
words = [''.join(random.sample(word, len(word))) for word in words] 
0

मेरे सामने उन तरह, मैं random.shuffle() का उपयोग करेंगे :

>>> import random 
>>> def mixup(word): 
...  as_list_of_letters = list(word) 
...  random.shuffle(as_list_of_letters) 
...  return ''.join(as_list_of_letters) 
... 
>>> map(mixup, l) 
['oof', 'iogylob', 'seucqene'] 
>>> map(mixup, l) 
['foo', 'byolgio', 'ueseqcen'] 
>>> map(mixup, l) 
['oof', 'yobgloi', 'enescque'] 
>>> map(mixup, l) 
['oof', 'yolbgoi', 'qsecnuee'] 

यह भी देखें:

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