【问题标题】:Python Iterate Over StringPython迭代字符串
【发布时间】:2017-04-25 08:32:49
【问题描述】:

所以我有一个字符串,例如“AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN”。

我希望能够循环开始并打印超过 16 个字符。然后向上移动 1 个字母,循环超过 16 个字符并打印出来。直到用完 16 个字符。

对我如何做到这一点有任何帮助吗?

【问题讨论】:

  • 你有没有尝试过?
  • 显示预期结果

标签: python


【解决方案1】:

这样的?

string = "AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN"
for n in range(len(string)-15):
    print(string[n:n+16])

您必须遍历每个字符,直到最后一个字符后面有 16 个字符(因此字符串的长度,负 15(因为索引从 0 开始):len(string)-15),然后打印切片的字符串在该起始索引处,直到索引 + 16 (string[n:n+16])。

切片是 Python 编程的一个重要且 IMO 强大的方面,如果您不熟悉该语言(或一般编程)并且绝对应该练习它,那么它是一本很好的读物。 The official docs 有一些关于该主题的好信息。

【讨论】:

    【解决方案2】:

    如果我理解得很好,你可能想做这样的事情:

    a = "AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN"
    
    for i in range(len(a) - 15):
        print(a[i:i+16])
    

    【讨论】:

    • 我没有看到这个
    【解决方案3】:

    我愿意:

    str = "AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN"
    
    for i in range(len(str)):
        if len(str[i:i+16]) == 16:
            print(str[i:i+16])
        else: 
            break
    

    【讨论】:

    • 这可能有效,但它涉及一个不必要的 if-else-condition,这对于非常长的字符串(不必要的多余字符迭代和每次迭代比较字符串长度)效率低下,你不需要迭代在整个字符串上,然后检查长度是否有效。您可以通过迭代字符子集来暗示正确的字符串长度(请参阅其他答案)
    • 是的。我也可以将字符串保存在一个变量中,这样我就不会访问它两次。我只是试图让它自我解释,但无论如何这并不难......哦,好吧!
    • if 语句可以用 Python 中更高效的 try/except 循环代替。
    • @funk 它实际上并没有弹出任何异常,我只是尝试过。它只是将字符串打印到一个字符。在 C 语言中,我希望出现 NullPointerException,但在 Python 中似乎并非如此。
    • 我在这里找到了答案stackoverflow.com/questions/9490058/…
    【解决方案4】:

    列表理解怎么样?

    s = 'AABBCCCASSDSFGDFGHDGHRTFBFIDHFDUFGHSIFUGEGFGNODN'
    print [s[x:x+16] for x in range(len(s)-15)]
    
    ['AABBCCCASSDSFGDF', 'ABBCCCASSDSFGDFG', 'BBCCCASSDSFGDFGH', 'BCCCASSDSFGDFGHD', 'CCCASSDSFGDFGHDG', 'CCASSDSFGDFGHDGH', 'CASSDSFGDFGHDGHR', 'ASSDSFGDFGHDGHRT', 'SSDSFGDFGHDGHRTF', 'SDSFGDFGHDGHRTFB', 'DSFGDFGHDGHRTFBF', 'SFGDFGHDGHRTFBFI', 'FGDFGHDGHRTFBFID', 'GDFGHDGHRTFBFIDH', 'DFGHDGHRTFBFIDHF', 'FGHDGHRTFBFIDHFD', 'GHDGHRTFBFIDHFDU', 'HDGHRTFBFIDHFDUF', 'DGHRTFBFIDHFDUFG', 'GHRTFBFIDHFDUFGH', 'HRTFBFIDHFDUFGHS', 'RTFBFIDHFDUFGHSI', 'TFBFIDHFDUFGHSIF', 'FBFIDHFDUFGHSIFU', 'BFIDHFDUFGHSIFUG', 'FIDHFDUFGHSIFUGE', 'IDHFDUFGHSIFUGEG', 'DHFDUFGHSIFUGEGF', 'HFDUFGHSIFUGEGFG', 'FDUFGHSIFUGEGFGN', 'DUFGHSIFUGEGFGNO', 'UFGHSIFUGEGFGNOD', 'FGHSIFUGEGFGNODN']
    

    【讨论】:

    • 理解很好,但 OP 并不是暗示他需要列表中的结果。但是,如果是这样的话,那就太好了。
    • @LennartKloppenburg 好吧,他并没有暗示任何关于他相当模糊的问题,所以我现在会坚持使用这些列表。
    • 我想这是有道理的;)
    【解决方案5】:

    就我而言,我在python中使用了split方法

    # a string from the user e.g "Good Morning How are you ?"
    text = input() 
    
    # split string
    split_text = text.split()  # to get the string as a list
    
    print(split_text)
    

    结果:['Good', 'Morning', 'How', 'are', 'you', '?']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2019-07-15
      • 2014-04-21
      • 2015-11-28
      • 2020-06-20
      • 2020-07-23
      • 2014-09-23
      相关资源
      最近更新 更多