我想打印一个句子中所有大写字符的位置,但是我不知道为什么,如果同一个字母在同一个句子中多次大写,这个循环继续打印第一个位置。
在这个句子中,大写字母"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)
它应该工作