我需要一个 100000 个字符长的字符串。在 python 中生成这样一个字符串的最有效和最短的方法是什么?
字符串的内容并不重要。
问问题
115 次
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 回答