[英]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.upper
, str.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.