【问题标题】:change some lowercase letters to uppercase in string将字符串中的一些小写字母更改为大写
【发布时间】:2012-01-03 07:07:03
【问题描述】:
index = [0, 2, 5]
s = "I am like stackoverflow-python"
for i in index:
        s = s[i].upper()
print(s)

IndexError: string index out of range

我知道在第一次迭代中,字符串s 只是第一个字符,在这种特殊情况下是大写的“I”。但是,我尝试在没有 "s = " 的情况下使用 swapchcase() 来代替,但它不起作用。

基本上,我正在尝试使用 Python 3.X 打印带有索引字母为大写的 s 字符串

【问题讨论】:

    标签: python string python-3.x uppercase


    【解决方案1】:

    字符串在 Python 中是不可变的,因此您需要创建一个新的字符串对象。一种方法:

    indices = set([0, 7, 12, 25])
    s = "i like stackoverflow and python"
    print("".join(c.upper() if i in indices else c for i, c in enumerate(s)))
    

    打印

    I like StackOverflow and Python
    

    【讨论】:

      【解决方案2】:

      这是我的解决方案。它不会遍历每个字符,但我不确定将字符串转换为列表再转换回字符串是否更有效。

      >>> indexes = set((0, 7, 12, 25))
      >>> chars = list('i like stackoverflow and python')
      >>> for i in indexes:
      ...     chars[i] = chars[i].upper()
      ... 
      >>> string = ''.join(chars)
      >>> string
      'I like StackOverflow and Python'
      

      【讨论】:

      • 在这种情况下你不需要set()string = list(..) 具有误导性,您可以使用 chars(较少误导)。
      • 是的。我实际上优化了解决方案,不再需要转换为列表。不过谢谢。 :)
      • 是的,使用 set 是不必要的,但如果 OP 想要添加索引怎么办?为此目的,一个集合是有意义的。
      • 1.来自MutableString docstring:更快更好的解决方案是使用列表重写程序。 2. indexes = [0, 2, 5] ... OP 想要添加索引 ... indexes.append(1)
      • 但是如果一个索引已经存在,那么你要为那个索引加倍工作。使用一组才有意义。来自set 的文档字符串:“构建独特元素的无序集合。”它不需要排序,每个索引都应该是唯一的,因为重复是没有意义的。
      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2021-03-30
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2011-05-12
      相关资源
      最近更新 更多