簡體   English   中英

Pythons最快的隨機化字符串的方式

[英]Pythons fastest way of randomising case of a string

我想隨機化一個字符串的情況,繼承我所擁有的:

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

我想知道你是否可以使用列表理解來加快速度。 我似乎無法使用randomchoice中的lower()和upper()函數,我試圖做類似的事情

''.join(randomchoice(x.upper(),x.lower()) for x in word)

但我認為那是錯的。 這樣的事情雖然可能嗎?

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

''.join(random.choice((str.upper,str.lower))(x) for x in s)

random.choice從兩個函數str.upperstr.lower隨機選擇一個。

然后,此函數將應用於輸入字符串s每個字母的x

如果初始字符串包含所有小寫字母,我將使用此代碼:

''.join(x.upper() if random.randint(0,1) else x for x in s)

因為在小寫初始字符串的情況下,初始代碼將在一半字母上使用冗余str.lowercase

順便說一下,請看Michael J. Barber的另一個答案。 Python對函數調用收費很高。 在他的代碼中,他只調用str.upper一次。 在我的代碼中, str.upper被調用大約一半的初始字符串符號。 因此,在內存中仍然會創建一個臨時的大寫字符串,他的代碼的時間效率可能會更高。


瞧,看哪:

代碼時序比較: https//ideone.com/eLygn

嘗試這個:

word="this is a lower case string"
caps = word.upper()
''.join(x[random.randint(0,1)] for x in zip(word, caps))

這應該勝過您的版本,因為它對upper的調用次數要少得多,因為更重要的是,它避免了在循環版本中使用的O(N ^ 2)連續追加。

通過修改問題,您需要創建小寫和大寫版本:

word="This is a MixeD cAse stRing"
caps = word.upper()
lowers = word.lower()
''.join(random.choice(x) for x in zip(caps, lowers))

正如Tim Pietzcker在評論中所建議的那樣,我使用了random.choice來選擇zip調用創建的元組中的字母。

由於問題已經改變,更多地關注速度,最快的方法可能是使用Numpy:

''.join(numpy.where(numpy.random.randint(2, size=len(caps)), list(caps), list(lowers)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM