2024-09-27 07:22:57 发布
网友
列表与此类似:
[["12", "stuA", "stuB"], ["51", "stuC", "stuD"], ..., ["3234", "moreStuff", "andMore"]]
现在我只需要通过第一个值(例如"332")来定位一个项(getindex)。除了从第一个值开始迭代并与每个值进行比较之外,有没有更好的方法来完成这项工作?在
"332"
代码:
目前还没有人提到这一点,所以我会-如果您需要快速地根据项目的值查找项目(而且可能不止一次),您应该将使用的数据结构更改为支持所需访问类型的数据结构。列表支持按索引而不是按项值快速访问。如果将信息存储在由列表中第一个元素键控的dict中,则可以通过第一个值很快地找到行:
# Make a dict from the list of lists: itemLookup = {item[0]: item for item in theList} itemLookup["51"] # -> ["51", "stuC", "stuD"]
因此,简单的答案是no(尽管如果对列表进行排序,有一种使用二分法的快速方法),较长的答案是如果您想要快速查找,请使用字典。在
如果你能保证你想要的密钥只存在一次,这也可以工作。在
import itertools itertools.ifilter(lambda x: x[1][0] == "332", enumerate(theList)).next()[0]
如果您修改它以使用generator对象,而不是像我在这里那样立即调用next,那么它将用于多次出现。在
next
如果可行的话,我建议将数据移动到dict格式(OrderedDict,如果出现的位置很重要),将这些整数作为键(因为您可以保证它们是唯一的),或者可能移动到以整数为索引的pandas数据帧。在
dict
OrderedDict
否。如果不迭代,则无法找到它,除非列表已排序。您可以像这样使用^{}和列表理解来改进代码。在
[index for index, item in enumerate(thelist) if item[0] == "332"]
这将给出第一个元素是332的所有元素的索引。在
332
如果您知道332只出现一次,那么您可以这样做
目前还没有人提到这一点,所以我会-如果您需要快速地根据项目的值查找项目(而且可能不止一次),您应该将使用的数据结构更改为支持所需访问类型的数据结构。列表支持按索引而不是按项值快速访问。如果将信息存储在由列表中第一个元素键控的dict中,则可以通过第一个值很快地找到行:
因此,简单的答案是no(尽管如果对列表进行排序,有一种使用二分法的快速方法),较长的答案是如果您想要快速查找,请使用字典。在
如果你能保证你想要的密钥只存在一次,这也可以工作。在
如果您修改它以使用generator对象,而不是像我在这里那样立即调用
next
,那么它将用于多次出现。在如果可行的话,我建议将数据移动到
dict
格式(OrderedDict
,如果出现的位置很重要),将这些整数作为键(因为您可以保证它们是唯一的),或者可能移动到以整数为索引的pandas数据帧。在否。如果不迭代,则无法找到它,除非列表已排序。您可以像这样使用^{} 和列表理解来改进代码。在
这将给出第一个元素是
332
的所有元素的索引。在如果您知道
^{pr2}$332
只出现一次,那么您可以这样做相关问题 更多 >
编程相关推荐