geri dilim rastgele uzunlukta ve rasgele içinde olduğu şekilde bir sıra tipi dilim pythonic yolu var mı? Örneğin, bir şey gibi:Python Rastgele Dilim Idiom
>>> l=["a","b","c","d","e"]
>>> rs=l[*:*]
>>> rs
['e','c']
geri dilim rastgele uzunlukta ve rasgele içinde olduğu şekilde bir sıra tipi dilim pythonic yolu var mı? Örneğin, bir şey gibi:Python Rastgele Dilim Idiom
>>> l=["a","b","c","d","e"]
>>> rs=l[*:*]
>>> rs
['e','c']
... Nasıl rastgele olan modül için dokümanlara
random.sample(l, random.randint(1, len(l)))
Hızlı bağlantı here bulunabilir.
Farkında olduğum hiçbir deyim yok, ancak random.sample
ihtiyaç duyduğunuz her şeyi yapıyor.
>>> from random import sample, randint
>>>
>>> def random_sample(seq):
... return sample(seq, randint(0, len(seq)))
...
>>> a = range(0,10)
>>> random_sample(a)
[]
>>> random_sample(a)
[4, 3, 9, 6, 7, 1, 0]
>>> random_sample(a)
[2, 8, 0, 4, 3, 6, 9, 1, 5, 7]
Sorunuz ve diğer cevapların adreslenmediği ince bir ayrım var, bu yüzden işaret etmem gerektiğini hissediyorum. Aşağıdaki örnekte gösterilmiştir. Sonuçtan da görebileceğiniz gibi
>>> random.sample(range(10), 5)
[9, 2, 3, 6, 4]
>>> random.sample(range(10)[:5], 5)
[1, 2, 3, 4, 0]
, ilk sürümü değil, "dilim" listesi, ancak yalnızca örnekleri yapar dönüş değerleri Listenin herhangi arasında olabilir böylece. Bunun yerine
random.sample(l, random.randint(1, len(l)))
, sen olacaktır: kelimenin tam anlamıyla listesinin bir "dilim" - isterseniz aşağıdaki istediğini yapmaz - Eğer örnek alınmadan önce numune alan sınırlamak istiyorsanız yani, böyle bir şey yapmak zorunda:
sample_len = random.randint(1, len(l))
random.sample(l[:sample_len], sample_len)
Ama bunu yapmak için daha iyi bir yolu şöyle olacağını düşünüyorum:
shuffled = l[:random.randint(1, len(l))]
random.shuffle(shuffled)
Maalesef shuffle
hiçbir kopyalamaya karşı dönen versiyonu var ben farkındayım (ör. shuffled
, sorted
'a benzer).
+1. –
@senderle 'shuffled = lambda p: örnek (p, len (p))' ' –
Neden aşağı oy? Literal "dilim" yorum ve amaçlanan çözüm hakkında bilgi için –