2013-03-28 5 views
0

문자열의 문자를 위치로만 대체하려고합니다.Python : 문자열의 문자를 위치로 바꾸기

여기 제가 가지고있는 것은 도움이 될 것입니다!

+0

문자열 대신 목록으로 유지하지 않는 이유는 무엇입니까? 그렇다면'newhand [i] = r.choice (cardset)' –

+0

문자열 만 변경할 수 있습니다. 새로운 것을 작성하십시오 – JBernardo

답변

1

왜 직접 교체하지 않습니까? 이 hand이 목록이 아닌 문자열이라고 가정한다

for i in pos: 
    newhand[i]=r.choice(cardset) 

:에

for i in pos: 
    newhand=newhand.replace(newhand[i],r.choice(cardset)) 

간다. hand 만약
문자열들이 immutable

이기 때문에 변경 될 수 없습니다 당신이 문자열로 손을 유지하려면 프로그램이 시점에서 문자열,
내가,리스트로 유지하는 것이 좋습니다입니다

newhand = ''.join([(x,r.choice(cardset))[i in pos] for i,x in enumerate(newhand)]) 

을하지만이 newhand에 다시 저장하기 전에 문자열로 목록에 newhand를 변환 한 다음에 가입됩니다, 당신은 항상 할 수 있었다. 또한

, 라인 :

if isinstance(pos, int): 
       pos=(pos,) 

을 변경해야합니다 : 그것은 항상 false를 반환하기 때문에

pos = [int(index) for index in pos.split(',')] 

당신은 isinstance 필요하지 않습니다.

newhand = '{0}{1}{2}'.format(newhand[:i], r.choice(cardset), newhand[i + 1:]) 
+0

그 해결책으로이 오류가 발생합니다 : TypeError : 'str'객체가 항목 할당을 지원하지 않습니다 – user2218235

+0

@ user2218235'hand'를 문자열로 유지하려면 두 번째 해결책을 사용하십시오. – Serdalis

+0

정말 고마워요! – user2218235

1

,이 솔루션입니다. replace 함수를 호출하면 ALL 두 번째 인수로 첫 번째 인수의 인스턴스가 대체됩니다.

newhand = AKAK9이면 newhand.replace ("A", "Q")는 newhand = QKQK9가됩니다.

가능하면, 목록에 문자열을 변경 한 후이 특정 인덱스를 변경하려면 다음을 수행하십시오

필요한 경우
for i in pos: 
    newhand[i]=r.choice(cardset) 

, 당신은 다음 STR를 사용하여 다시 문자열로 newhand 목록을 변경할 수 있습니다() :

hand = ''.join(str(e) for e in newhand_list) 
0

귀하의 문제는 대체 기능입니다 : 아직 문자열을 계속하려면

+1

'hand'가 자신의 프로그램에없는'list' 인 경우에만. – Serdalis

+0

정확합니다. 반영하기 위해 응답을 업데이트했습니다. –

+0

'str'을 사용하여'list'를'string'으로 변환 할 수 없습니다. – Serdalis

관련 문제