我想在列表中存储两个或多个重复字符的实际索引。为此我使用了index()但它返回了所有重复字符的相同索引。 针对这个问题的任何其他解决方案。
答案 0 :(得分:3)
让我们的列表和我们想要的元素定义如下:
my_list = [1, 3, 2, 4, 3, 3, 5, 3]
desired_element = 3
然后你可以使用一个很好的内置Python,enumerate()
:
indexes = [index for index, element in enumerate(my_list) if element == desired_element]
print(indexes)
输出正如预期[1, 4, 5, 7]
。
或者,以更好的格式:
def indexes(my_list, desired_element):
return [index for index, element in enumerate(my_list) if element == desired_element]
然后使用indexes(list, element)
调用它。
如果你正在寻找效率(我怀疑你是):
def indexes2(my_list, desired_element):
for index, element in enumerate(my_list):
if element == desired_element:
yield index
对于大型列表(据我测试过),速度提高了4-5倍。请注意,这会返回一个生成器,为了显示结果,您必须使用list(...)
将其转换为列表。
答案 1 :(得分:0)
使用pandas我们可以将它读到pd系列并一次完成一些操作。
import pandas as pd
l = ['a','b','c','a','b']
d = (pd.Series(l)[pd.Series(l).duplicated(keep=False)]
.reset_index()
.groupby(0)['index']
.apply(list)
.to_dict())
d
返回:
{'a': [0, 3], 'b': [1, 4]}
或者这个:
d = (pd.Series(l)
.reset_index()
.groupby(0)['index']
.apply(lambda x: list(x) if len(list(x)) > 1 else None)
.dropna()
.to_dict())