在列表中索引元素
问题的出现原因是需要对列表中的元素进行索引,即找到每个元素在列表中的位置。解决方法是使用字典或collections模块中的defaultdict()函数来存储每个元素的索引。
首先,可以使用defaultdict()函数来存储每个元素的索引。代码如下:
from collections import defaultdict a=[2,4,5,2] indexes = defaultdict(list) for i, e in enumerate(a): indexes[e].append(i) print(indexes)
运行结果如下:
defaultdict(, {2: [0, 3], 4: [1], 5: [2]})
这样,可以通过访问indexes字典来获取每个元素的索引。例如:
>>> indexes[2] [0, 3] >>> for i in indexes[2]: ... print(i, '-->', a[i]) ... 0 --> 2 3 --> 2
另外,也可以使用dict.setdefault()函数来实现相同的功能。代码如下:
indexes = {} for i, e in enumerate(a): indexes.setdefault(e, []).append(i) print(indexes)
运行结果也是相同的:
{2: [0, 3], 4: [1], 5: [2]}
可以看到,使用dict.setdefault()函数也可以实现相同的效果。此外,还可以使用indexes.setdefault(e, list()).append(i)或indexes.setdefault(e, []).append(i)来实现相同的功能,甚至更加高效。
在给定的代码中,我们可以看到一个使用列表推导式的语句,用来获取列表中特定元素的索引。具体的代码如下:
[print i for i,v in enumerate(a) if v==2] # or any number
这段代码的目的是打印出列表中值为2的元素的索引。然而,在第一条评论中指出,为什么要调用print函数,并且这似乎是一个Python2的问题。在第二个评论中,作者回答了这个问题,表示将删除print函数调用,并解释了在Python2中使用括号仍然有效,只是简化了表达式。
因此,这个问题的原因是代码中包含了不必要的print函数调用,而解决方法是删除该调用。修正后的代码如下:
[i for i,v in enumerate(a) if v==2] # or any number
这样,代码将只返回列表中值为2的元素的索引,而不是打印出来。
索引元素在一个列表中是一个常见的操作,但有时候可能会遇到问题。下面我们来看一下为什么会出现这个问题以及解决方法。
出现问题的原因可能是因为我们需要找到列表中特定元素的索引,但不知道如何实现。在这种情况下,可以使用列表推导式来解决这个问题。列表推导式是一种简洁的方式来创建新的列表,可以根据特定的条件从现有列表中选择元素。
为了找到列表中所有特定元素的索引,我们可以使用下面的代码:
indices = [i for i in xrange(len(a)) if a[i] == 2]
在这个代码中,我们使用了一个列表推导式。首先,我们使用range(len(a))
来生成一个包含所有索引的列表。然后,我们使用if a[i] == 2
来筛选出所有值为2的元素的索引。最后,我们将筛选出的索引组成一个新的列表。
这样,我们就得到了包含所有值为2的元素的索引的列表indices
。
总结一下,索引元素在一个列表中是一个常见的需求。为了解决这个问题,我们可以使用列表推导式来筛选出特定元素的索引。通过这种方式,我们可以轻松地找到列表中特定元素的索引,而不需要遍历整个列表。这样,我们可以更高效地处理列表中的数据。