2010-04-06 17 views
7

Bir dizeden rastgele harfler dilimlemek istiyorum.Python: Değiştirmeden bir eleman seçmek

Verilen s = "Merhaba"

Ben 's' yerine koymadan öğeleri almak ama dizin numarasını tutmak istiyorum

. Örneğin

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

ne istiyorum yakındır, ama aslında '

[('w', 2), ('h', 0), (böyle bir şey tercih ediyorum o ', 1), (' d ', 3), (' y ', 4)]

, letter-index çiftleriyle. Bu önemlidir, çünkü aynı harf bir kereden fazla '' görünür. yani) '' harfi '' iki kez görünür, ancak ilk 't' 'i diğerinden ayırmam gerekir.

İdeal olarak, sadece ihtiyaç duyduğumda harfleri üretmeye/seçmeye ihtiyacım var, ancak tüm harfleri bir kerede (örneğin: yukarıda gösterildiği gibi) karıştırmak ve hesaplamak tamam.

cevap

16
>>> random.sample(list(enumerate(a)), 5) 
[(1, 'o'), (0, 'h'), (3, 'd'), (2, 'w'), (4, 'y')] 
sadece örnekleme önce liste numaralandırmak olabilir
8

:

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

Böyle bir şey yapmak için muhtemelen daha kolay:

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

Bu temelde bir dize için tüm indisleri olarak karıştırılır ve sonra sadece bu endekste karakteri döndür. Karakterden indekse geçmek biraz daha zor.

+1

Benzer bir şey önereceğim, ama yukarıdaki listeyi (numara (lar)) kullanmalısınız: 'return random.shuffle (liste (numara (lar))) – jemfinch

+0

Evet, tek yarar Bunun yerine, bunun yerine hangi endeksleri kullanmak istediğinizi seçerek ve sonra bunu son iki çizgi ile takip edebileceğiniz bir şey yapmak istiyorsanız, bunu yapabilirsiniz. –

İlgili konular