python大写字母——如果有多个实例,同一位置将被打印多次



我想打印一个句子中所有大写字符的位置,但是我不知道为什么,如果同一个字母在同一个句子中多次大写,这个循环继续打印第一个位置。

在这个句子中,大写字母"H"出现了两次,我希望打印以下索引:

0 7 12 16

但是我打印了0 7 12 0

sentence= 'Have a Nice Day Hey'
for i in sentence:
if i.isupper():
print(sentence.index(i),i)

这是一种更python化的方式来做同样的事情并正确输出:

sentence= 'Have a Nice Day Hey'
for index, letter in enumerate(sentence):
if letter.isupper():
print(index, letter)

查看Python文档中的enumerate函数

使用str.index()返回该字符的第一次出现,因此在您的示例中,sentence.index('H')将始终返回0

更多信息在这里:https://docs.python.org/3/library/stdtypes.html#common-sequence-operations

s.index(x[, i[, j]]) - index of the first occurrence of x in s 
(at or after index i and before index j)

您需要的是使用计数器(或enumerate)遍历列表,并将计数器用于输出:

sentence= 'Have a Nice Day Hey'
c = 0
for i in sentence:
if i.isupper():
print(c)
c += 1

sentence.index(i)总是在句子中首先出现字母。尝试在循环时使用index:

for i in range(len(sentence)):
if sentence[i].isupper():
print(i, sentence[i])

使用enumerate访问项目和索引,以及列表推导式。这比为每个字符遍历字符串,然后再次遍历字符串以查找该字符的索引更容易、更快。

sentence = 'Have a Nice Day Hey'
upper_idxs = [i for i, c in enumerate(sentence) if c.isupper()]
print(upper_idxs)
# [0, 7, 12, 16]

Ok so:

sentence= 'Have a Nice Day Hey'

您需要将获取第一个大写字母的信息存储在某个地方。让我们使用一个表

ifoundx = []
for i in sentence:
if i.isupper() and i not in ifoundx :
print(index, letter)
ifoundx.append(i)

它应该工作

最新更新