List中的动态子字符串。变量之前的10个元素

时间:2014-12-08 20:19:04

标签: python python-2.7 substring

我有动态子串的问题。我有列表可以有1000个元素,100个元素甚至20个。我想制作该列表的副本,其中包含从-10到变量的元素。 例如(伪代码):

L = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
variable = 12
print L[substring:variable]
>>> L = [2,3,4,5,6,7,8,9,10,12]

我无法弄清楚如何纠正它。关键是变量总是改变一个。

这是我的代码:

def Existing(self, Pages):
     if(self.iter <= 10):
         list = self.other_list[:self.iter]
     else:
         list = self.other_list[self.iter-10:self.iter]
     result = 0
     page = Pages[0]

     list.reverse()

     for blocks in Pages:
         if(list.index(blocks) > result):
             result = list.index(blocks)
             page = blocks

     return page

该方法正在寻找具有最远索引的元素。 这部分可能不清楚。所以假设我们有

list = [1,2,3,4,1,5,2,1,2,3,4]

方法应该返回5,因为它是最重要的元素。列表有重复项,.index()返回第一个元素的索引,所以我反向列表。使用该代码有时程序返回List中不存在某些元素。问题(在使用debbuger深度检查之后)是self.other_list中的子字符串。

你可以帮我解决这个问题吗?如何使其正确?谢谢你的建议。

编辑:因为我的问题不够明确(我确信它可以),所以这里有更多的例子。

好的,所以列表页面列出了当前使用的页面。第二个清单&#34;列表&#34;是已使用的所有页面的列表。方法是查找已经使用过的页面并选择那个最长时间未使用的页面。用word&#34;使用&#34;我的意思是元素的索引。什么意味着最重要的元素?那个最小的索引(记住重复,最后一个重复意味着真正的索引)。

所以我们有:

Pages = [1,3,5,9]

list = [1,2,5,3,6,3,5,1,2,9,3,2]

方法应返回5.

总结: 我正在寻找产生结果的子串:

With list =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
For variable 12: [2,3,4,5,6,7,8,9,10,12] 
for 13: [3,4,5,6,7,8,9,10,11,13] 

等:-) 我知道问题可能很复杂。所以我想请你只关注子串。 :-)非常感谢你!

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,您希望找到lst中位于最低位置的页面中的项目索引(考虑重复)。

因此,为此,您需要首先反转列表,然后首先在lst中的每个项目的索引,如果找不到项目,则返回负无穷大。在这些指数中,您可以找到最大项目,然后您就会得到答案。

from functools import partial

pages = [1,3,5,9]
lst = [1,2,5,3,6,3,5,1,2,9,3,2]

def get_index(seq, i):
    try:
        return seq.index(i)
    except ValueError:
        return float('-inf')


lst.reverse()
print max(pages, key=partial(get_index, lst))
#5

请注意,上述方法需要二次时间,因此对于大型列表不会表现良好。如果你不关心一些额外的内存而不是线性时间,那么你可以使用set和dict:

pages_set = set(pages)
d = {}
for i, k in enumerate(reversed(lst), 1):
    if k not in d and k in pages_set:
        d[k] = len(lst) - i

print min(d, key=d.get)
#5