2013-07-24 5 views
0

저는 파이썬을 사용하여 웹 API 세트를 테스트하고 있습니다. 언어는 아직 학습 중입니다. 나는 문자열 (대리점의 이름)을 취하고 임의의 수의 문자 다음에 끝을 잘라냅니다. 그런 다음 문자열 끝에 문자 (와일드 카드)를 추가합니다. 이 수정 된 문자열은 다음 딜러의 이름을 검색하고 와일드 카드를 포함 할 수있는 API로 전달됩니다. 나는 아래 코드를 가지고 있지만 길어 보인다. 이 문제에 접근하기위한 더 깨끗한 방법이나 더 평범한 방법이 있습니까? 잠재적으로 문자열에서 목록으로, 문자열로 변환하지 않고 이것을 수행하는 방법?파이썬은 목록으로 변환하는 것보다 문자열을 분할하는 더 좋은 방법이 있습니까?

split_name = list(name)  #turns name string into list 
rand = random.randint(6,(len(split_name)-1)) #generates random number 
split_name[rand:len(split_name)] = []  #breaks of end part of name list 
srch_name = ''.join(split_name)  #stringifies list 
#Send request 
rqst = requests.get(name_srch %(key, (srch_name + '*'))) #this adds * and sends the request 

이름이 이전과 같은 몇 가지 문자열로 스크립트에 정의 된 "데이브 및 청구서 장비 판매 및 서비스, INC는" 나는 2.7

답변

2

예, 사용 슬라이스에 파이썬을 사용하고주의해야한다 문자열에서 문자의 임의의 숫자를 선택, 필요 먼저리스트에 분할 없습니다 :

rand = random.randint(6, len(split_name) - 1) 
search_name = name[rand:] + '*' 
rqst = requests.get(name_srch % (key, search_name)) 

문자열은 먼저 목록으로 바꿀 필요없이 직접를 얇게 너무 시퀀스를 지원합니다. 이 경우 엔드 포인트를 생략하고 문자열의 끝을 기본값으로 분할 할 수 있습니다.

+0

원래 답변에 대한 응답으로'string.split()'이'list (string)'보다 약 두 배 빠릅니다. – 2rs2ts

+3

@ 2rs2ts :'.split()'는 완전히 다른 것을 *합니다. –

+0

감사합니다 Martijn,이게 더 좋은 해결책입니다. 어떤 점에서 나는 partialword * partialword를 찾아야한다. 그 방법은 내 코드보다 훨씬 더 쉽게 표시됩니다 (여기에 붙여 넣지는 않겠지 만 끔찍한 것처럼 보입니다). 'search_name = name [: rand1] + "*"+ name [rand2 :] " 그 런즈는 적절히 계산됩니다. @ 2rs2ts, 나는 'string.split()'사용에 대해 생각해 보았지만 전체 단어 사이에만 와일드 카드를 삽입 할 필요는 없었습니다. 호기심에서 왜 2 배 빠를까요? 더 작은 목록을 만들니까? – user2616239

관련 문제