Rasgele dize büyük harf ve Python basamaklı nesil
Boyutta bir dize N. oluşturmak istiyorum
Sayılar ve büyük harf İngilizce olarak yapılmalıdır
- 6U1S75
- 4Z4UKK
- U911K4
Nasıl pythonic bir şekilde bunu başarabilir miyim?
CEVAP
Tek satırda cevap:
''.join(random.choice(string.ascii_uppercase string.digits) for _ in range(N))
Daha güvenli bir sürümü; http://stackoverflow.com/a/23728630/2213647 bkz
''.join(random.SystemRandom().choice(string.ascii_uppercase string.digits) for _ in range(N))
Ayrıca yeniden kullanım için temiz bir fonksiyonu ile detayları:
>>> import string
>>> import random
>>> def id_generator(size=6, chars=string.ascii_uppercase string.digits):
... return ''.join(random.choice(chars) for _ in range(size))
...
>>> id_generator()
'G5G74W'
>>> id_generator(3, "6793YUIO")
'Y3U'
Nasıl çalışır ?
string
ortak ASCII karakter dizileri içeren bir modül ve random
rastgele nesil ile ilgili bir modül ithal ediyoruz.
string.ascii_uppercase string.digits
sadece karakterler büyük harf ASCII karakter ve rakam temsil listesini birleştirir:
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.ascii_uppercase string.digits
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
O zaman bir liste oluşturmak için liste bir anlama kullanıyoruz 'n' elemanları
>>> range(4) # range create a list of 'n' numbers
[0, 1, 2, 3]
>>> ['elem' for _ in range(4)] # we use range to create 4 times 'elem'
['elem', 'elem', 'elem', 'elem']
Yukarıdaki örnekte, biz kullanmak [
oluşturmak için liste, ama yok içinde id_generator
çalışabilmesi için Python yok oluştur listesinde, bellek, ama oluşturan unsurlar anında, tek tek (bu konuda daha fazla here).
Oluşturmak için sormak yerine '' kez dize elem
Python oluşturmak için isteyeceğiz 'n' kere rastgele bir karakter, karakter dizisi çekildi: . n
>>> random.choice("abcde")
'a'
>>> random.choice("abcde")
'd'
>>> random.choice("abcde")
'b'
Bu nedenle random.choice(chars) for _ in range(size)
gerçekten size
karakter dizisi oluşturma. Rastgele chars
seçilmiş karakterler:
>>> [random.choice('abcde') for _ in range(3)]
['a', 'b', 'b']
>>> [random.choice('abcde') for _ in range(3)]
['e', 'b', 'e']
>>> [random.choice('abcde') for _ in range(3)]
['d', 'a', 'c']
Biz de daha sonra sıra bir dize olur, boş bir dize ile katılmak:
>>> ''.join(['a', 'b', 'b'])
'abb'
>>> [random.choice('abcde') for _ in range(3)]
['d', 'c', 'b']
>>> ''.join(random.choice('abcde') for _ in range(3))
'dac'
Nasıl Python ile büyük / küçük harf du...
Python) bir dize her kelimenin ilk har...
JavaScript büyük / küçük harf duyarlı ...
Nasıl dize karşılaştırırken büyük / kü...
Eclipse bir dize büyük / küçük harf de...