我是新來的Python,來自Java和C.我如何增加一個字符?在Java或C中,字符和整數實際上是可以互換的,並且在某些循環中,能夠執行增量字符和通過字符索引數組對於我來說非常有用。Python:我如何增加一個字符?
我該如何在Python中做到這一點?沒有一個傳統的(;;)循環者已經夠糟糕了 - 有什麼辦法可以實現我想要實現的目標,而不必重新考慮我的整個策略?
任何幫助表示讚賞。
我是新來的Python,來自Java和C.我如何增加一個字符?在Java或C中,字符和整數實際上是可以互換的,並且在某些循環中,能夠執行增量字符和通過字符索引數組對於我來說非常有用。Python:我如何增加一個字符?
我該如何在Python中做到這一點?沒有一個傳統的(;;)循環者已經夠糟糕了 - 有什麼辦法可以實現我想要實現的目標,而不必重新考慮我的整個策略?
任何幫助表示讚賞。
在Python 2.x中,只需使用ord
和chr
功能:
>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>>
Python 3.x都有使這個更有組織和更有趣,因爲在字節和Unicode之間的明顯區別。默認情況下,「字符串」是unicode,所以上述工作(ord
接收Unicode字符,chr
生成它們)。
但是,如果你有興趣以字節爲單位(如處理一些二進制數據流),事情就更簡單了:
>>> bstr = b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
「壞夠不具有傳統的(;;)尺蠖」? ?什麼?
你試圖做
import string
for c in string.lowercase:
...do something with c...
或者,也許你正在使用string.uppercase
或string.letters
?
Python沒有for(;;)
,因爲通常有更好的方法來做到這一點。它也沒有角色數學,因爲它也沒有必要。
+1,試圖回答問題背後的問題(XY問題,等等)。如果可以的話,我會給你更多。 – 2010-01-28 18:59:58
謝謝。我經常首先問「爲什麼?」對於這樣的問題。但@SilentGhost擊敗了我。 – 2010-01-28 19:01:48
我來自PHP,你可以使用++運算符來增加字符(A到B,Z到AA,AA到AB等)。我做了一個簡單的函數,它在Python中執行相同的操作。您還可以將字符列表更改爲任何(小寫,大寫等)是您的需要。
# Increment char (a -> b, az -> ba)
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
# Unique and sort
chlist = ''.join(sorted(set(str(chlist))))
chlen = len(chlist)
if not chlen:
return ''
text = str(text)
# Replace all chars but chlist
text = re.sub('[^' + chlist + ']', '', text)
if not len(text):
return chlist[0]
# Increment
inc = ''
over = False
for i in range(1, len(text)+1):
lchar = text[-i]
pos = chlist.find(lchar) + 1
if pos < chlen:
inc = chlist[pos] + inc
over = False
break
else:
inc = chlist[0] + inc
over = True
if over:
inc += chlist[0]
result = text[0:-len(inc)] + inc
return result
我可以問,你爲什麼需要這樣做? – SilentGhost 2010-01-28 18:33:24
傳統'for'循環:'我在範圍內(50):do_something_with(i)'。來吧,這並不壞! – jathanism 2010-01-28 18:39:10
@SilentGhost:我正在拆分一個英文字典以用於Android應用程序。由於這個文件太大,我寫了一個Python腳本將它們分成words_aa.txt,words_ab.txt等等......我需要編寫第二個腳本來生成一個包含Ids的數組的Java文件每個單詞文件的原始文件資源(因爲我很懶),我想不出有更好的方法去做。 – 2010-01-28 18:40:31