簡體   English   中英

在Python中獲取字符串中的第n個字符

[英]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

對於字母ltext.index('l')將返回2 ,因此僅當n12時才將其包含在輸出中。 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

希望這會有所幫助。

使用Python的slicing語法:

Python的slicing語法非常類似於range()函數。 它接受一個startstopstep值:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM