【问题标题】:Why does it recognize the second capital T as 0?为什么它将第二个大写 T 识别为 0?
【发布时间】:2021-11-13 16:21:55
【问题描述】:

我正在尝试制作一个简短的程序,它将在单个字符串中查找所有大写字母。我让它为前两个大写字母工作,但它不会返回最后一个大写字母的正确位置。我做错了什么?

def capital_indexes(n):
    listOfUpperPlaces = []
    for x in n:
        print(x)
        if x.isupper():
            characterPlace = n.index(x)
            print(characterPlace)
            listOfUpperPlaces.append(characterPlace)

    return listOfUpperPlaces

print(capital_indexes("TEsTo"))

【问题讨论】:

  • 你知道index是做什么的吗?
  • n.index(x) 将只返回第一个匹配项。使用 enumerate 来遍历索引以及字符
  • list.index 是一个新手陷阱。对于它所应用的任何工作,它几乎总是错误的工具 - 大多数时候,enumerate 是正确的工具,而在其余的大部分时间里,应该使用不同的数据结构。

标签: python capitalization


【解决方案1】:

这是因为 n.index(x) 返回字符串 n 中第一次出现的 x。因为 "T" 出现多次,所以 n.index(x) 返回第一次出现的 "T" 你想遍历 range(len(n),比如

def capital_indexes(n):
listOfUpperPlaces = []
for x in range(len(n)):
    print(n[x])
    if n[x].isupper():
        print(x)
        listOfUpperPlaces.append(x)

return listOfUpperPlaces

打印(capital_indexes("TEsTo"))

【讨论】:

  • 这是 enumerate 的工作,不是 range-len 迭代。
【解决方案2】:

问题是对 n.index(x) 的调用 这是搜索字符串以找到 x,并且它能够在字符串的开头找到大写的 T。

更好的方法是使用枚举,它同时为您提供索引和项目。

不能通过电话很好地编码,但类似于:

for index, character in enumerate(n):
    if character.isUpper():
        list_of_upper_places.append(index)

这将正确处理重复项,并且速度也会更快,因为您不需要搜索字符串来计算当前正在检查的字符。对于大多数 python 程序员来说,它也会更容易阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2021-03-05
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多