我正在尝试编写一个消耗字符串和字符的函数,并为该字符串中所有出现的字符生成一个索引列表。
到目前为止,这就是我所拥有的,但它总是给我[]。
def list_of_indices(s,char):
string_lowercase = s.lower()
sorted_string = "".join(sorted(string_lowercase))
char_list = list(sorted_string)
for x in char_list:
a = []
if x == char:
a.append(char_list.index(x))
return a
我不明白为什么这不会产生答案。它必须是非空长度列表。
任何人都知道如何获取所有事件的索引?
答案 0 :(得分:1)
您将在for
- 循环的第一次迭代中返回。确保return
语句不在循环范围内。
另外,请确保在<{em} { - 1}}循环之前放置a = []
。否则,您将在每次循环迭代时有效地重置列表。
for
也存在问题。这将始终返回char_list.index(x)
的第一个出现的索引,这不是您想要的。您应该在循环时跟踪索引(例如使用enumerate()
)。
而且我不确定你是怎么做的那种;循环遍历原始字符串就足够了。
最后,请注意,您可以直接循环字符串;您不需要将其转换为列表(即x
是不必要的)。
请注意,您的任务可以通过简单的list comprehension:
来完成char_list
答案 1 :(得分:0)
您可以使用快速list comprehension实现它。
def list_of_indicies(s, char):
return [i for i, c in enumerate(s) if c == char]
或改为使用for循环:
def list_of_indicies(s, char):
results = list()
for i, c in enumerate(s):
if c == char:
results.append(i)
return results
答案 2 :(得分:0)
你正在for循环迭代的第一个循环返回一个。
为初学者更改循环:
def list_of_indices(s,char):
string_lowercase = s.lower()
a = []
i = 0
for x in string_lowercase:
if x == char:
a.append(i)
i+=1
return a