我尝试随机附加文本字符串,而不是像
那样输出>>>david
我最终会得到像
这样的东西>>>DaViD
>>>dAviD
我现在的代码就是这个
import random
import string
print "Name Year"
text_file = open("names.txt", "r")
for line in text_file:
print line.strip()+"".join([random.choice(string.digits) for x in range(1, random.randint(1,9))])
并且它推翻了这个
>>>JOHN01361
我希望那个字符串像
一样>>>jOhN01361
>>>john01361
>>>JOHN01361
>>>JoHn01361
答案 0 :(得分:7)
嗯,你的规范实际上是随机大写的字符,如果你是如此倾向,你可以通过以下列表理解来实现:
import random
s = "..."
s = "".join( random.choice([k.upper(), k ]) for k in s )
但可能有更好的方式......
答案 1 :(得分:1)
import random
lol = "lol apples"
def randomupper(c):
if random.random() > 0.5:
return c.upper()
return c.lower()
lol =''.join(map(randomupper, lol))
编辑:
正如Shawn Chin在评论中所指出的,这可以简化为:
lol = "".join((c.upper(), c)[random() > 0.5] for c in lol)
非常酷,但比使用map
慢。
编辑2:
运行一些计时器测试,似乎是
"".join( random.choice([k.upper(), k ]) for k in s )
比map方法慢5倍以上,有人能证实这一点吗?
时间是:
no map: 5.922078471303955
map: 4.248832001003303
random.choice: 25.282491881882898
答案 2 :(得分:0)
以下可能比Nook的解决方案稍微有效一点,也不依赖于小写文本开头:
import random
txt = 'JOHN01361'
''.join(random.choice((x,y)) for x,y in zip(txt.upper(),txt.lower()))
答案 3 :(得分:0)
为了好玩而定时不同的实现:
#!/usr/bin/env python
import random
def f1(s):
return ''.join(random.choice([x.upper(), x]) for x in s)
def f2(s):
return ''.join((x.upper(), x)[random.randint(0, 1)] for x in s)
def f3(s):
def randupper(c):
return random.random() > 0.5 and c.upper() or c
return ''.join(map(randupper, s))
def f4(s):
return ''.join(random.random() > 0.5 and x.upper() or x for x in s)
if __name__ == '__main__':
import timeit
timethis = ['f1', 'f2', 'f3', 'f4']
s = 'habia una vez... truz'
for f in timethis:
print '%s: %s' % (f,
timeit.repeat('%s(s)' % f, 'from __main__ import %s, s' % f,
repeat=5, number=1000))
这是我的时代:
f1: [0.12144303321838379, 0.13189697265625, 0.13808107376098633, 0.11335396766662598, 0.11961007118225098]
f2: [0.22459602355957031, 0.23735499382019043, 0.19971895217895508, 0.2097780704498291, 0.22068285942077637]
f3: [0.044358015060424805, 0.051508903503417969, 0.045358896255493164, 0.047426939010620117, 0.042778968811035156]
f4: [0.04383397102355957, 0.039394140243530273, 0.039273977279663086, 0.045912027359008789, 0.039510011672973633]