我有动态子串的问题。我有列表可以有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]
等:-) 我知道问题可能很复杂。所以我想请你只关注子串。 :-)非常感谢你!
答案 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