【问题标题】:how to change one element's value base on its previous one in a loop如何在循环中根据其前一个元素更改一个元素的值
【发布时间】:2013-07-24 05:29:39
【问题描述】:

在 Python 3 中,如何将 'b' 之间的元素更改为大写形式。 从 ls = ['a','b','c','d','b','f'] 到 ls = ['a','b','C','D','b','f']

有没有办法控制迭代器的位置?

【问题讨论】:

    标签: list for-loop python-3.x iterator


    【解决方案1】:

    使用切片:

    >>> ls = ['a','b','c','d','b','f']
    >>> i = ls.index('b')
    >>> j = ls.index('b', i+1)
    >>> ls[i+1:j] = map(str.upper, ls[i+1:j])
    >>> ls
    ['a', 'b', 'C', 'D', 'b', 'f']
    

    【讨论】:

      【解决方案2】:

      就个人而言,我会使用已经建议的切片语法。但如果您有兴趣,这里有另一个解决方案(相同的运行时复杂度,更好的空间复杂度):

      >>> ls = ['a','b','c','d','b','f']
      >>> mode = False
      >>> for i,char in enumerate(ls):
      ...     if char == 'b':
      ...         mode = not mode
      ...         continue
      ...     if mode:
      ...         ls[i] = char.upper()
      ... 
      >>> ls
      ['a', 'b', 'C', 'D', 'b', 'f']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-29
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多