枚举字符串,而不是使用range()和len()进行迭代

时间:2019-02-13 21:21:36

标签: python python-3.x enumerate

我编写了一个函数,该函数返回一个由第二个字符组成的新字符串,从第一个字符开始。

例如,“ Pizza”产生“ Pza”,“ Maogtbhdewr”产生“ Mother”。

此代码与range()len()一起使用:

def string_skip(string):
    new_string = ""
    for n in range(0, len(string)):
        if n % 2 == 0:
            new_string += string[n]

    return new_string

上面的代码按预期工作。但是pylint显示了一条信息,建议使用enumerate()而不是使用range()len()进行迭代。因此,我试图在没有两个内置函数的情况下重写代码,并且还阅读了文档。但是我仍然无法正常工作。

我的问题:如何使用enumerate()而不是range()len()

7 个答案:

答案 0 :(得分:6)

是的,字符串也是可迭代的。

def string_skip(string):
    new_string = ""
    for i, n in enumerate(string):
        if i % 2 == 0:
            new_string += n

    return new_string

答案 1 :(得分:3)

s="Pizza"
s[::2]
Out[3]: 'Pza'

您甚至不需要范围和len甚至枚举

答案 2 :(得分:1)

尝试此功能:

def string_skip(st):
    return ''.join([j for i, j in enumerate(x) if not i % 2])

for i, j in enumerate(string)只需解压缩以下内容:

0, string[0]
1, string[1]
2, string[2]
...

>>> for i, j in enumerate('Pizza'):
...     print i, j
... 
0 P
1 i
2 z
3 z
4 a
>>> 

答案 3 :(得分:1)

@attersson指出,您可以依靠Python序列的slicing功能(可以索引的任何内容):

>>> s = "Pizza"
>>> s[::2]
'Pza'

您可以指定在迭代第三个值时要使用的 step ,而不是仅索引一个字符(s[2])或一系列字符(s[2:4])。在方括号之间。

总而言之,Python中的索引工作方式为[start:stop:step],其中start是包含端点,而stop是排斥端点。默认情况下,start=0stop=len(...)step=1

>>> s[2]
'z'
>>> s[2:4]
'zz'
>>> s[1::2]
'iz'

现在,如果您真的想使用枚举,则可以依赖产生的索引:

>>> for i, letter in enumerate(s):
>>>     if i % 2 == 0:
>>>         print(letter)

答案 4 :(得分:0)

只需使用:

def str_func(mystr):

    newstr = ''

    for i, char in enumerate(mystr):
        if not i%2:
            newstr+=char
    return newstr

如果您特别喜欢,可以使用列表理解和join

def str_func(mystr):
    return "".join([char for i,char in enumerate(mystr) if not i%2 ])

答案 5 :(得分:0)

尝试一下:

def string_skip_2(string):
   string = list(string)
   new_string = ''
   for i in range(len(string)):
       if int(list(enumerate(string))[i][0]) % 2 == 0:
           new_string += list(enumerate(string))[i][1]
   return new_string

答案 6 :(得分:0)

提供另一种选择,该选择在元素上进行迭代以类似于枚举,但更为优雅:

def string_skip(string):
    new_string = ""
    iterator = iter(string)
    for letter in iterator:
        new_string += letter
        next(iterator)
    return new_string