IT이야기

문자열에서 문자 한 개 변경

cyworld 2022. 3. 10. 22:24
반응형

문자열에서 문자 한 개 변경

Python에서 문자열의 문자를 대체하는 가장 쉬운 방법은 무엇인가?

예를 들면 다음과 같다.

text = "abcdefg";
text[1] = "Z";
           ^

문자열을 수정하지 마십시오.

그들을 리스트로 만들어라; 필요할 때만 그들을 문자열로 만들어라.

>>> s = list("Hello zorld")
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'z', 'o', 'r', 'l', 'd']
>>> s[6] = 'W'
>>> s
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> "".join(s)
'Hello World'

파이톤 문자열은 불변(즉, 수정할 수 없음)이다.이것에는 많은 이유가 있다.선택권이 없을 때까지 목록을 사용한 다음 문자열로 변경하십시오.

가장 빠른 방법?

세 가지 방법이 있다.스피드 서포터들에게 나는 '메소드 2'를 추천한다.

방법 1

대답에 의해 주어진다.

text = 'abcdefg'
new = list(text)
new[6] = 'W'
''.join(new)

'메소드 2'에 비하면 상당히 느린 것.

timeit.timeit("text = 'abcdefg'; s = list(text); s[6] = 'W'; ''.join(s)", number=1000000)
1.0411581993103027

방법 2(빠른 방법)

대답에 의해 주어진다.

text = 'abcdefg'
text = text[:1] + 'Z' + text[2:]

훨씬 빠른 속도:

timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
0.34651994705200195

방법 3:

바이트 배열:

timeit.timeit("text = 'abcdefg'; s = bytearray(text); s[1] = 'Z'; str(s)", number=1000000)
1.0387420654296875
new = text[:1] + 'Z' + text[2:]

파이톤 문자열은 불변이다. 복사를 해서 바꾼다.
원하는 작업을 수행하는 가장 쉬운 방법은 다음과 같다.

text = "Z" + text[1:]

text[1:]문자열을 반환하다text위치 1에서 끝까지 위치는 0부터 계산되므로 '1'은 두 번째 문자다.

편집: 문자열의 모든 부분에 동일한 문자열 슬라이싱 기법을 사용할 수 있음

text = text[:1] + "Z" + text[2:]

또는 아래에 제시된 검색 및 교체 기술을 사용할 수 있는 경우에만 문자가 나타나는 경우

python 2.6 및 python 3부터 변이 가능한 bytearray를 사용할 수 있음(현과 달리 요소별로 변경할 수 있음):

s = "abcdefg"
b_s = bytearray(s)
b_s[1] = "Z"
s = str(b_s)
print s
aZcdefg

편집: str을 s로 변경

edit2: 논평에서 언급한 2비트 연금술사처럼, 이 코드는 유니코드와 함께 작동하지 않는다.

이 코드는 내 것이 아니다.어디서 찍은 사이트인지 기억이 안 나.흥미롭게도, 당신은 이것을 하나 또는 그 이상의 캐릭터가 하나 또는 그 이상의 샤렉터로 대체하는데 사용할 수 있다.비록 이 답장이 매우 늦었지만, 나 같은 초보자들은 그 답장이 유용하다고 느낄지도 모른다.

텍스트 기능 변경.

mytext = 'Hello Zorld'
mytext = mytext.replace('Z', 'W')
print mytext,

다른 사람들이 말했듯이, 일반적으로 파이톤 문자열은 불변의 것이어야 한다.

그러나 python.org에서 구현되는 CPython을 사용하는 경우 ctype을 사용하여 메모리의 문자열 구조를 수정할 수 있다.

여기 내가 그 기술을 사용하여 줄을 지우는 예가 있다.

python에서 데이터를 중요한 것으로 표시

나는 완전성을 위해 이것을 언급했고, 이것이 당신의 마지막 수단이 되어야 한다. 그것은 진부한 것이기 때문이다.

Python에서는 문자열이 불변하므로 기존 문자열을 변경할 수 없다.하지만 만약 당신이 그 안에 있는 어떤 문자열을 바꾸고 싶다면, 당신은 다음과 같이 새로운 문자열을 만들 수 있다.

def replace(s, position, character):
    return s[:position] + character + s[position+1:]

1, '교교('King', 1, 'o')
콩// 결과: 콩

참고: 위치 값을 문자열 길이보다 크게 지정하면 문자열이 끝에 추가된다.

('Dog ''교('Dog', 10, 's')
/ 결과: 개

난 f-string을 좋아해.

text = f'{text[:1]}Z{text[2:]}'

내 기계에서 이 방법은 문자열을 연결하기 위해 +를 사용하는 "빠른 방법"보다 10% 더 빠르다.

>>> timeit.timeit("text = 'abcdefg'; text = text[:1] + 'Z' + text[2:]", number=1000000)
1.1691178000000093
>>> timeit.timeit("text = 'abcdefg'; text = f'{text[:1]}Z{text[2:]}'", number =1000000)
0.9047831999999971
>>>

사실, 끈을 가지고 이런 일을 할 수 있다.

oldStr = 'Hello World!'    
newStr = ''

for i in oldStr:  
    if 'a' < i < 'z':    
        newStr += chr(ord(i)-32)     
    else:      
        newStr += i
print(newStr)

'HELLO WORLD!'

기본적으로 나는 새로운 문자열 :)에 함께 "추가"+"줄"을 붙이고 있다.

당신의 세계가 100%라면.ascii/utf-8(해당 박스에 적합한 많은 사용 사례):

b = bytearray(s, 'utf-8')
# process - e.g., lowercasing: 
#    b[0] = b[i+1] - 32
s = str(b, 'utf-8')

비단뱀 3.7.3

문자열에서 문자를 변경하는 다른 방법을 추가하고 싶다.

>>> text = '~~~~~~~~~~~'
>>> text = text[:1] + (text[1:].replace(text[0], '+', 1))
'~+~~~~~~~~~'

문자열을 목록으로 변경하고 ith 값을 바꾼 후 다시 가입하는 것과 비교하면 얼마나 빠른가?

리스트 어프로치

>>> timeit.timeit("text = '~~~~~~~~~~~'; s = list(text); s[1] = '+'; ''.join(s)", number=1000000)
0.8268570480013295

마이솔루션

>>> timeit.timeit("text = '~~~~~~~~~~~'; text=text[:1] + (text[1:].replace(text[0], '+', 1))", number=1000000)
0.588400217000526

다음과 같은 문구를 사용할 수 있는 경우 찾기 및 대체 방법을 단일 행으로 결합한 솔루션:

```python
my_var = "stackoverflaw"
my_new_var = my_var.replace('a', 'o', 1) if my_var.find('s') != -1 else my_var
print(f"my_var = {my_var}")           # my_var = stackoverflaw
print(f"my_new_var = {my_new_var}")   # my_new_var = stackoverflow
```

문자열에서 문자를 바꾸려면 다음과 같이 하십시오.

다음 방법 중 하나를 사용하십시오.

방법 1

대체적으로.

string = f'{string[:index]}{replacing_character}{string[index+1:]}'

여기

text = f'{text[:1]}Z{text[2:]}'

방법 2

대체적으로.

string = string[:index] + replacing_character + string[index+1:]

여기

text = text[:1] + 'Z' + text[2:]

다음을 시도해 보십시오.

old_string = "mba"
string_list = list(old_string)
string_list[2] = "e"
//Replace 3rd element

new_string = "".join(string_list)

print(new_string)

참조URL: https://stackoverflow.com/questions/1228299/changing-one-character-in-a-string

반응형