在Python中获取字符串中的每个第n个字符

时间:2017-09-30 14:53:15

标签: python arrays string

我有以下功能,但它没有给我预期的结果:

def GetNthLetters(text,n):
    builtstring=""
    for letter in text:
        if text.index(letter)%n==0:
            builtstring=builtstring+letter
            print letter 
    return builtstring   

5 个答案:

答案 0 :(得分:2)

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,因此只有在n1或{{{{}}}时才会将其包含在输出中1}}。 2也出现在索引3或9处并不重要,因为您只测试l。这同样适用于2 % n == 0(位置4和7),只测试了'o'

您可以使用enumerate() function为您提供正在运行的索引:

4 % n == 0

现在def GetNthLetters(text, n): builtstring = "" for index, letter in enumerate(text): if index % n == 0: builtstring = builtstring + letter return builtstring 对于每个重复或不重复的字母都是正确的。

然而,使用切片会更容易:

index

这也是每个第n个字母:

def GetNthLetters(text, n):
    return text[::n]

答案 1 :(得分:1)

如果有人要我给字符串中的每个第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

答案 2 :(得分:0)

myJs

希望这会有所帮助。!

答案 3 :(得分:0)

使用Python的slicing语法:

Python的slicing语法与range()函数非常相似。它接受startstopstep值:

  

string[start : stop : step]

您可以将任何参数留空,它们将默认为0,字符串的长度和1

这意味着您可以:

  

string[::n]

获取每个nth字符串的字符串。

所以你可以把function写成:

def getNthLetters(text, n):
   return text[::n]

希望这可以做你想要的!

答案 4 :(得分:0)

代码的问题是每次相同重复字母的索引都会给出相同的结果。

例如' Hello World!' .index(' o')将始终为4,因此不会给出预期的结果。

最好的方法是enumerate for循环。所以你会得到合适的索引。

你还应该记住数组以0而不是1开始。