1

我需要一个 100000 个字符长的字符串。在 python 中生成这样一个字符串的最有效和最短的方法是什么?
字符串的内容并不重要。

4

8 回答 8

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)
于 2012-07-20T08:52:10.287 回答
3

你可以简单地做

s = 'a' * 100000
于 2012-07-20T08:49:37.067 回答
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 上测试

于 2012-07-20T09:01:47.330 回答
1

字符串可以使用乘法运算符:

"a" * 100000 
于 2012-07-20T08:49:41.247 回答
1

尝试制作一个空白字符数组。

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

' '这将分配一个大小为 100000的字符数组

longCharArray.tostring()

将转换为字符串。

于 2012-07-20T08:53:41.750 回答
0

只需选择一些字符并重复 100000 次:

 "a"*100000

为什么你会想要这个是另一个问题。. .

于 2012-07-20T08:49:48.987 回答
0

你可以尝试这样的事情:

"".join(random.sample(string.lowercase * 385,10000))
于 2012-07-20T08:53:53.690 回答
0

作为一个班轮:

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

更改 range() 值以获得不同长度的字符串;更改 randint() 的边界以获得不同的字符集。

于 2012-07-20T08:54:51.897 回答