2012-07-20 50 views
1

我需要有一個100000個字符長的字符串。在python中生成這樣一個字符串的最有效和最短的方法是什麼?
字符串的內容不重要。如何在python中生成具有特定長度的任意字符串?

+1

爲什麼需要這個?如果以任何方式修改它,則會創建一個新字符串。 – eumiro 2012-07-20 08:50:53

+1

*「最短的路是什麼」* ......代碼高爾夫最短,還是最有效率? – 2012-07-20 08:54:08

+0

@eumiro我需要這個字符串在我寫的腳本中做一些測試。 – 2012-07-20 08:57:38

回答

5

喜歡的東西:

'x' * 100000 # or, 

''.join('x' for x in xrange(100000)) # or, 

from itertools import repeat 
''.join(repeat('x', times=100000)) 

或者對位的字母查詢股價的:

from string import ascii_letters 
from random import choice 
''.join(choice(ascii_letters) for _ in xrange(100000)) 

或者,對於一些隨機數據:

import os 
s = os.urandom(100000) 
+0

謝謝,我使用了''abcd'* 25000'。那就是訣竅。 – 2012-07-20 09:00:21

+1

@EdwinDrood注意''a'* 100000'比'「abcd」* 2500'快。在我的答案(社區wiki)中查看基準。 – 2012-07-20 09:22:51

3

你可以簡單地做

s = 'a' * 100000 
1

字符串可以用乘法運算符:

"a" * 100000 
0

只是挑選一些性格和重複100000次:

"a"*100000 

你爲什麼會想這是另一個問題。 。 。

1

嘗試使陣列空白字符。

import array 
longCharArray = array.array('c',[' ']*100000) 

這將分配的大小100000

longCharArray.tostring() 

' '字符的陣列將轉換爲字符串。

0

你可以嘗試這樣的事情:

"".join(random.sample(string.lowercase * 385,10000)) 
0

作爲一個班輪:

''.join([chr(random.randint(32, 126)) for x in range(30)]) 

變化範圍()值獲得不同長度的字符串;更改randint()的範圍以獲取不同的字符集。

2

因爲效率是很重要的,這裏有一個快速的標杆一些迄今提到的方法之一:

$ python -m timeit "" "'a'*100000" 
100000 loops, best of 3: 4.99 usec per loop 

$ python -m timeit "from itertools import repeat" "''.join(repeat('x', times=100000))" 
1000 loops, best of 3: 2.24 msec per loop 

$ python -m timeit "import array" "array.array('c',[' ']*100000).tostring()" 
100 loops, best of 3: 3.92 msec per loop 

$ python -m timeit "" "''.join('x' for x in xrange(100000))" 
100 loops, best of 3: 5.69 msec per loop 

$ python -m timeit "import os" "os.urandom(100000)" 
100 loops, best of 3: 6.17 msec per loop 

毫不奇怪,對那些發佈,使用字符串乘法是最快遠。

另請注意,將單個字符比多個字符串(要獲取相同的最終字符串長度)更有效。

$ python -m timeit "" "'a'*100000" 
100000 loops, best of 3: 4.99 usec per loop 

$ python -m timeit "" "'ab'*50000" 
100000 loops, best of 3: 6.02 usec per loop 

$ python -m timeit "" "'abcd'*25000" 
100000 loops, best of 3: 6 usec per loop 

$ python -m timeit "" "'abcdefghij'*10000" 
100000 loops, best of 3: 6.03 usec per loop 

測試上的Python 2.7.3

+0

感謝您的基準測試。我會牢記這一點。 – 2012-07-20 09:40:24

相關問題