用python产生一个随机列_用Python实现的一个简单的随机生成器

朋友在ctr工作,苦于各种排期神马的,让我帮他整一个xxxx管理系统

里面在用户管理上面需要有一个批量从文件导入的功能,我肯定不能用汉字来作唯一性约束,于是想到了随机生成.

我首先想到的是直接用itertools和random来'随机'产生一些,够用就OK了,想想其他的也不麻烦,类似微博等的短链生成工具用起来是很方便的,这是背景

割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割割

网上搜索了一下相关的实现方法,看到了一个Java版的,这里用Python实现一下.

import uuid

def random_generator1(total=1, length=6):

for i in range(total):

base = list('abcdefghijklmbopqrstuvwxyzABCDEFGHIJKLMBOPQRSTUVWXYZ0123456789')

seed = str(uuid.uuid4()).replace('-', '')

lst = []

for i in range(length):

sub_str = seed[i*4:i*4+4]

x = int(sub_str, 16)

lst.append(base[x % 62])

return ''.join(lst)

将上面的return换成yield,作为一生成器来用也是可以的,这样可以方便的往列表里面插入,

import uuid

def random_generator2(total=1, length=6):

for i in range(total):

base = list('abcdefghijklmbopqrstuvwxyzABCDEFGHIJKLMBOPQRSTUVWXYZ0123456789')

seed = str(uuid.uuid4()).replace('-', '')

lst = []

for i in range(length):

sub_str = seed[i*4:i*4+4]

x = int(sub_str, 16)

lst.append(base[x % 62])

yield ''.join(lst)

本地随便测试了一下,

...

if __name__ == '__main__':

lst = random_generator1(1000000)

print len(set(lst))

# out put 100000

据说Java实现的那位测试了下1000W条数据中也没有出现重复,看起来应该是够用了.

顺便说一下,这里uuid选取uuid4() 生成随机uuid作为种子,其他的几种不太理想,本地测试了一下时间戳方式的uuid1,10W条数据大概会有3W左右的重复,100W的时候重复了大概80W...

所以说,种子很重要啊..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值