【问题标题】:Finding first instance of one list in a second list在第二个列表中查找一个列表的第一个实例
【发布时间】:2012-08-18 16:23:01
【问题描述】:

我有两个列表。

第一个列表已经排序(通过一些其他标准),因此列表中越早越好。

sortedList = ['200', '050', '202', '203', '206', '205', '049', '047', '042', '041', '043', '044', '046', '045', '210', '211', '306', '302', '308', '309', '311', '310', '221', '220', '213', '212']

第二个列表是允许值的列表:

allowedList = ['001','002','003','004','005','006','007','008','009','010','203','204','205','206','207','212','213','215','216']

我想选择 allowedList 中存在的最高排序值,我只是想出了一些愚蠢的方法。像这样的事情:

import numpy as np
temp = []
for x in allowedList:
    temp.append(sortedList.index(x))
np.min(temp)

必须有比这更好的方法。有什么想法吗?

【问题讨论】:

    标签: python list numpy set


    【解决方案1】:

    使用allowedlist 已经排序这一事实的解决方案可能更有效(并且使用set,它们当然是 - 线性时间与二次),但仅出于完整性考虑,您现有的解决方案可以缩短很多并删除了临时列表:

    min(allowedList, key=sortedList.index)
    

    这使用 Python 的 built-in min function,而不是来自 numpy 的 np.min 主要仅在您将它们与 numpy 数组一起使用时有用;使用列表时不需要它。

    【讨论】:

      【解决方案2】:
      allowedSet = set(allowedList)
      i, a = next(((i, a) for i, a in enumerate(sortedList) if a in allowedSet), (-1, None))
      

      i 是第一个这样的元素 (3) 的索引,a 是那个元素 ('203')。

      在任何情况下,如果这两个列表没有共同的元素,i = -1a = None,您可以自行修改。

      【讨论】:

        【解决方案3】:

        以下是在没有 numpy 的情况下如何做到这一点

        >>> sorted_list = ['200', '050', '202', '203', '206', '205', '049', '047', '042', '041', '043', '044', '046', '045', '210', '211', '306', '302', '308', '309', '311', '310', '221', '220', '213', '212']
        >>> allowed_list = ['001','002','003','004','005','006','007','008','009','010','203','204','205','206','207','212','213','215','216']
        >>> allowed_set = set(allowed_list)
        >>> next((x for x in sorted_list if x in allowed_set), None)
        '203'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-23
          相关资源
          最近更新 更多