Pythons最快的随机化字符串的方式

6 python string random variables

我想随机化一个字符串的情况,继承我所拥有的:

word="This is a MixeD cAse stRing"
word_cap=''
for x in word:
        if random.randint(0,1):
                word_cap += x.upper()
        else:
                word_cap += x.lower()
        word = word_cap

print word
Run Code Online (Sandbox Code Playgroud)

我想知道你是否可以使用列表理解来加快速度.我似乎无法使用randomchoice中的lower()和upper()函数,我试图做类似的事情

''.join(randomchoice(x.upper(),x.lower()) for x in word)
Run Code Online (Sandbox Code Playgroud)

但我认为那是错的.这样的事情虽然可能吗?

ovg*_*vin 8

import random
s = 'this is a lower case string'

''.join(random.choice((str.upper,str.lower))(x) for x in s)
Run Code Online (Sandbox Code Playgroud)

random.choice随机地选择一个从两个功能str.upper,str.lower.

然后,此函数将应用于x输入字符串中的每个字母s.

如果初始字符串包含所有小写字母,我将使用此代码:

''.join(x.upper() if random.randint(0,1) else x for x in s)
Run Code Online (Sandbox Code Playgroud)

因为在str.lowercase小写初始字符串的情况下,初始代码将在一半字母上使用冗余.

顺便说一下,请看Michael J. Barber的另一个答案.Python对函数调用收费很高.在他的代码中,他str.upper只调用一次.在我的代码str.upper中调用大约一半的初始字符串符号.因此,在内存中仍然会创建一个临时的大写字符串,他的代码的时间效率可能会更高.


瞧,看哪:

代码时序比较:https://ideone.com/eLygn

  • 为什么在已经小写的字符串上调用`str.lower()`? (2认同)
  • @TimPietzcker 因为初始字符串可能有大写字母 (2认同)