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 に答える