2009-12-12 7 views
0

에 내가 정수의 임의의 목록을 생성하는 코드 줄을 사용하고 INT :파이썬 임의의 문자열 질문

random.sample(range(2000), 100) 

나는 늘 내 결과를 double 값의를 알고이 코드를. 같은 결과를 얻을 수있는 더 빠른 방법일까요?

이제 실제로이 int를 문자열로 변환해야합니다. 이 작업을 수행하는 가장 빠른 방법은 무엇입니까?

감사

답변

1

random.sample는 교체하지 않고 목록 에서 정수를 선택합니다. 중복을 피하고자한다면, 당신이하고있는 일이 올바른 방법입니다. 귀하의 전화 번호가 훨씬 커질 수 있습니까? 범위에있는 정수의 전체 목록을 생성하지 않으려면 Python 3 또는 Python 2에서 xrange를 사용해야합니다.

(당신이 xrange를 사용하는 경우 모든 정수를 생성하는 random.sample가 발생하지 않는 것을 지적 JF 세바스찬에게 감사드립니다.)

당신이 대신 randrange 사용할 수있는 중복 허용 할 경우

randomInts = [random.randrange(2000) for _ in range(100)] 

문자열로 변환하려면

randomStrings = [str(x) for x in randomInts] 
+0

-1 :'임의

strings = map(str, lst) 

문자열 하나로서 .sample()'은 en을 생성하지 않습니다. 샘플 타이어. 'random.sample (xrange (10 ** 9), 100)'과'random.sample (xrange (10 ** 3), 100)'같은 시간이 걸립니다. – jfs

+0

괜찮습니다. 생성기를 통해 최적화 할 수 있고 요소를 실제로 생성 할 수 없다는 것을 알지 못했습니다. 그것은 나를 실제로 생성하지 않고 미래에 얻을 수있는 숫자를 어떻게 알 수 있는지 궁금하게 만듭니다. 생성자는 원하는 것을 반환 할 수 있습니다. 엑스 렌지를위한 특수 처리가 필요합니까? –

+1

'random.sample'의 소스를 살펴 보는 것이 낫겠지 만'__len__'과'__getitem__' 메소드 만 사용한다고 생각합니다. – jfs

0
import random 
r = random.sample(range(2000), 100) 
# One way to convert them to strings: 
s = [str(x) for x in r] 
0

당신을 많이하고 많이 생성됩니다 경우 s의 무작위 수 목록을 사용하면 룩업을 가속화하기 위해 문자열을 미리 생성 할 수 있습니다.

stringcache = dict((val, str(val)) for val in range(2000)) 

while some_condition: 
    r_strings = map(stringcache.get, random.sample(range(2000), 100)) 
2

사용 xrange 대신 range :

lst = random.sample(xrange(10**9), 100) 

문자열 목록으로 변환하려면 :

s = ''.join(strings) 
+1

xrange는 Python 3.0에 존재하지 않습니다. "NameError : name 'xrange'가 정의되지 않았습니다." –

+3

@Mark : *'python' 태그가 붙은 코드의 대부분은 Python 3.0에서 작동하지 않습니다 ('print' 문법 ->'print()'함수, 'xrange' ->'range'. 명시 적으로 * Python 3.x 요구 사항을 언급하지 않는 한 모든 코드 *는 Python 2.x로 가정해야합니다 – jfs