簡體   English   中英

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

[英]Enumerate over string instead of iterating with range() and len()

我編寫了一個函數,該函數返回一個由第一個字符開始的第二個字符組成的新字符串。

因此,例如“ 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()

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

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

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

您甚至不需要范圍和len甚至枚舉

試試這個功能:

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
>>> 

正如@attersson指出的那樣,您可以依靠Python序列的切片功能(可以索引的任何內容):

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

您不僅可以索引一個字符( 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)

只需使用:

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 ])

試試這個:

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

為了提供另一種選擇,它對元素進行類似於枚舉的迭代,但更為優雅:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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