2024-04-18 23:58:08 发布
网友
我有一个元素列表,其中一些元素可以重复。例如,a = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]。我想找到所有这些元素的索引。输出应该如下:For element 1, indices are [1, 5, 9]. For element 2, indices are [2, 6, 10] etc...
a = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
For element 1, indices are [1, 5, 9]. For element 2, indices are [2, 6, 10] etc...
谁能告诉我怎么做吗?注意,代码应该尽可能通用。你知道吗
使用enumerate的简单示例
list = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] myIndexes = [i for i,value in enumerate(list) if value == 1] print myIndexs
[0, 4, 8]
以你为例,你说:
For element 1, indices are [1, 5, 9]
你真的想要索引+1!注意!列表从0开始。你知道吗
因此,要获得索引+1,可以执行以下操作:
myIndexes = [i+1 for i,value in enumerate(list) if value == 1] print myIndexs
[1, 5, 9]
这里有一个相当普遍的方法:
>>> lst = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] >>> dct = {x:[] for x in lst} >>> for x,y in enumerate(lst, 1): ... dct[y].append(x) ... >>> dct {1: [1, 5, 9], 2: [2, 6, 10], 3: [3, 7, 11], 4: [4, 8, 12]} >>>
但是请注意,Python索引从0开始,因此1的列表应该是[0, 4, 8],2的列表应该是[1, 5, 9],等等。但是,因为您希望索引是+1,所以我将enumerate设置为从1开始。你知道吗
enumerate
上面的解决方案使用纯Python,没有任何导入。但是,如果导入collections.defaultdict,则可以提高性能:
collections.defaultdict
>>> from collections import defaultdict >>> dct = defaultdict(list) >>> for x,y in enumerate(lst, 1): ... dct[y].append(x) ... >>> dct {1: [1, 5, 9], 2: [2, 6, 10], 3: [3, 7, 11], 4: [4, 8, 12]} >>>
只要该项是可散列的,那么:
from collections import defaultdict data = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] dd = defaultdict(list) for idx, item in enumerate(data): dd[item].append(idx) # defaultdict(<type 'list'>, {1: [0, 4, 8], 2: [1, 5, 9], 3: [2, 6, 10], 4: [3, 7, 11]})
使用enumerate的简单示例
以你为例,你说:
你真的想要索引+1!注意!列表从0开始。你知道吗
因此,要获得索引+1,可以执行以下操作:
这里有一个相当普遍的方法:
但是请注意,Python索引从0开始,因此1的列表应该是
[0, 4, 8]
,2的列表应该是[1, 5, 9]
,等等。但是,因为您希望索引是+1,所以我将enumerate
设置为从1开始。你知道吗上面的解决方案使用纯Python,没有任何导入。但是,如果导入
collections.defaultdict
,则可以提高性能:只要该项是可散列的,那么:
相关问题 更多 >
编程相关推荐