2013-04-15 122 views
2

我正在努力解決python中的一個基本問題。我需要在某個位置讀取一個字符串以修改它。閱讀一個字符串位置

例如:對於字符串'abcd'我想讀取第3個位置(第2個確實是因爲您從0開始),並將其更改爲字母表的下一個字母'abdd'。但是,如果字符串碰巧是'abrd',應該更改爲'absd'等。所以,我需要閱讀和寫入一個特定的位置,並讓所有其他東西不變;應該是世界上最簡單的東西,但我找不到如何去做。

+0

我想你需要澄清一下你的問題。你是否希望改變**特定位置的字符串**?例如,不管第三個字符是「r」還是「c」,都要改變第三個位置。或者你正在尋找**搜索字符串'r' **:如果'r'改變了第四個位置,如果'c'改變了第三個位置等等。 – nqngo

+2

如果字母是'z'會怎麼樣? – pcalcao

回答

2

爲核心的回答你的問題很簡單:使用列表切片語法:

>>> string='abcd' 
>>> print string[:2] + 'd' + string[3:] 
abdd 

如果你認爲它是安全的,只是增加字符串的序號值,那麼你可以這樣做:

>>> string='abrd' 
>>> string=string[:2] + chr(ord(string[2]) + 1) + string[3:] 

由於沒有在您的問題中指定,所以我會假設這就是您的需要。如果你想從'z'循環到'a',或者特別處理不同的字母或unicode字符集,你可能會發現一些粗糙的補丁。

如果已經不僅僅是遞增ord一個更復雜的問題,可以考慮使用translation table

+1

用於最後一個元素替換。我建議使用'string [3:]'。字符串可能一直不是4個字母。類似地,'string [0:2]'可以短到'string [:2]'。 – nqngo

+1

@NhatNgo如此編輯。 – kojiro

+0

太棒了!現在我應該到達某個地方。謝謝 –

1

除了@kojiro答案。另一種方法是將字符串切換爲列表並將其加入。例如:

S = 'abcd' 
// Convert to list 
L = list(S) 
// Change 3rd position 
L[3] = 'd' 
// Join it back and print 
print ''.join(L) 

但是,如果需要替換不同的字符,可以定義一個字典映射緩解轉換過程。例如:

// Define {a -> x} mapping. 
M = {'c': 'd', 'r': 's'} 
// Substitution 
L[3] = M[L[3]] 
+0

謝謝,這很有用 –