[英]split python string every nth character (string and nth character are in lists)
[英]Getting every nth character in the string in Python
我具有以下功能,但未達到預期的效果:
def GetNthLetters(text,n):
builtstring=""
for letter in text:
if text.index(letter)%n==0:
builtstring=builtstring+letter
print letter
return builtstring
str.index()
查找字母的第一個匹配項 。 如果您的信件出現多次,那將給您錯誤的索引。 對於任何給定字符,您僅測試它們在字符串中的第一次出現是否在第 n個位置。
為了演示,請看一下帶有字符索引的字符串'hello world'
(我用.
來標記空格):
0 1 2 3 4 5 6 7 8 9 10
h e l l o . w o r l d
對於字母l
, text.index('l')
將返回2
,因此僅當n
為1
或2
時才將其包含在輸出中。 l
也出現在索引3或9上都沒關系,因為您只測試過2 % n == 0
。 'o'
(位置4和7)也是如此,其中只有4 % n == 0
才被測試。
您可以使用enumerate()
函數為您提供運行索引:
def GetNthLetters(text, n):
builtstring = ""
for index, letter in enumerate(text):
if index % n == 0:
builtstring = builtstring + letter
return builtstring
現在index
對於每個字母都是正確的,無論是否重復。
但是,使用切片會容易得多:
def GetNthLetters(text, n):
return text[::n]
這也需要第n個字母:
>>> 'foo bar baz'[::2]
'fobrbz'
>>> 'foo bar baz'[::3]
'f ra'
>>> 'foo bar baz'[::4]
'fbb'
如果有人要求我在字符串中輸入第n個字符,則不會包含第一個字符。 我寧願做如下事情:
def GetNthLetters(text, n):
builtstring = ""
for i in range(0, len(text)):
if (i + 1) % n == 0:
# print(text[i])
builtstring = builtstring + text[i]
return builtstring
text = '1234567890123456789012345678901234567890'
nthLetters = GetNthLetters(text, 1)
print(nthLetters)
nthLetters = GetNthLetters(text, 2)
print(nthLetters)
nthLetters = GetNthLetters(text, 3)
print(nthLetters)
nthLetters = GetNthLetters(text, 10)
print(nthLetters)
nthLetters = GetNthLetters(text, 40)
print(nthLetters)
這將產生以下結果:
1234567890123456789012345678901234567890
24680246802468024680
3692581470369
0000
0
string = "12345678"
n = 2
splitted_string = string[::n]
print(splitted_string)
# Output : 1357
希望這會有所幫助。
slicing
語法: Python的slicing
語法非常類似於range()
函數。 它接受一個start
, stop
和step
值:
string[start : stop : step]
您可以在其中保留任何參數為空白,它們的默認值分別為0
,字符串的長度和1
。
這意味着您可以:
string[::n
]
獲取字符串的nth
字符。
因此,您可以將function
編寫為:
def getNthLetters(text, n):
return text[::n]
希望這能滿足您的需求!
代碼的問題是每次相同重復字母的索引都會得到相同結果。
例如,“ Hello World!”。index('o')始終為4,因此不會給出預期的結果。
最好的方法是enumerate
for循環。 這樣您將獲得適當的索引。
您還應該記住,數組以0而不是1開頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.