提问人:Wilziam 提问时间:11/7/2023 最后编辑:XMehdi01Wilziam 更新时间:11/7/2023 访问量:81
索引函数给了我重复的响应
Index function is giving me duplicate responses
问:
def capital_indexes():
val = []
pos = []
x = input("Enter a value\n>>")
for i in x:
val.append(i)
for i in val:
if i.isupper():
pos.append(val.index(i))
print(pos)
capital_indexes()
在我上面的代码中,如果我要输入说“HHellO”,那么我会得到输出。我的目标是获得每个大写字母的索引,这将是 .[0, 0, 5]
[0, 1, 5]
答:
1赞
JRiggles
11/7/2023
#1
您可以通过列表理解轻松完成此操作enumerate
str_in = input("Enter a value\n>>") # get string from user ('HHellO')
# iterate over the string, adding the index of each uppercase char to the list
indices = [index for index, char in enumerate(str_in) if char.isupper()]
print(indices)
# => [0, 1, 5]
1赞
Timur Shtatland
11/7/2023
#2
使用列表推导式而不是多个循环。它更高效,更易于阅读,更像pythonic:
my_str = "HHellO"
capital_letter_idxs = [i for i, c in enumerate(my_str) if c.isupper()]
print(capital_letter_idxs)
# [0, 1, 5]
0赞
XMehdi01
11/7/2023
#3
若要获取每个大写字母的索引,可以使用循环并跟踪当前索引。for
更新代码:
def capital_indexes():
val = []
pos = []
x = input("Enter a value\n>>")
for i in x:
val.append(i)
for i, char in enumerate(val):
if char.isupper():
pos.append(i)
print(pos)
capital_indexes()
#input ==> HHellO
#output ==> [0, 1, 5]
0赞
hoftherose
11/7/2023
#4
你不能用索引来做到这一点,因为它给你提供了第一次出现的索引。在文档下方。
返回 S 中找到子字符串 sub 的最低索引,使得 sub 包含在 S[start:end] 中。可选参数 start 和 end 被解释为切片表示法。
你可以通过跟踪你所处的数组步骤来做到这一点。要么使用计数器
step = 0
for i in val:
if i.isupper():
pos.append(step)
step += 1
你也可以使用枚举,它会给你两个值,而不仅仅是 i
for step, i in enumerate(val):
if i.isupper():
pos.append(step)
0赞
Reilas
11/7/2023
#5
'...在我上面的代码中,如果我输入说“HHellO”,那么我会得到输出
[0, 0, 5]。
...'
发生这种情况的原因是您使用的是 index 方法。
这将返回第一个值的索引。
请改用 enumerate 内置函数。
s = 'HHellO'
a = []
for i, c in enumerate(s):
if c.isupper(): a.append(i)
或者,使用列表推导式。
s = 'HHellO'
a = [i for i, c in enumerate(s) if c.isupper()]
评论
idx = val.index(i, idx+1)
index()
返回 FIRST 匹配项的索引。因此,在上面的示例中,它两次都找到了第一个 H。