Python 列表上的动态子字符串。变量前的10个元素
我对动态子字符串有问题。我有一个列表,可以有1000个元素,100个元素,甚至20个元素。我想复制这个列表,它包含从-10到变量的元素。 例如(伪代码): 我不知道怎样才能使它正确。关键是变量总是以1为单位变化 以下是我的代码:Python 列表上的动态子字符串。变量前的10个元素,python,python-2.7,substring,Python,Python 2.7,Substring,我对动态子字符串有问题。我有一个列表,可以有1000个元素,100个元素,甚至20个元素。我想复制这个列表,它包含从-10到变量的元素。 例如(伪代码): 我不知道怎样才能使它正确。关键是变量总是以1为单位变化 以下是我的代码: def Existing(self, Pages): if(self.iter <= 10): list = self.other_list[:self.iter] else: list = self.oth
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
方法应该返回5,因为它是最远的元素。列表有重复项,并且.index()返回第一个元素的索引,所以我反转列表。使用该代码,程序有时返回列表中不存在的元素。问题在于self.other_列表中的子字符串(在与debbuger深入讨论之后)
你能帮我解决那个问题吗?如何使其正确?谢谢你的建议
编辑:因为我的问题不够清楚(我确信可以),所以这里有更多的例子
好的,列表页面就是当前使用的页面的列表。第二个列表“列表”是已使用的所有页面的列表。方法是查找已使用的页面,并选择最长时间未使用的页面。“使用”一词是指元素的索引。什么是最远的元素?索引最小的那个(记住关于重复项,最后的重复项表示实际索引)
因此,我们:
Pages = [1,3,5,9]
及
方法应返回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]
ect:-)
我知道这个问题很复杂。因此,我希望您只关注子字符串。:-)非常感谢 如果我正确理解了您的问题,您希望找到位于
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
更清楚的是,该方法是搜索LRU页面回复算法中使用时间最长的元素。因此,列表项总是排序的?从来没有排序过。列表包含0,9之间的随机整数。在上面的例子中,我只想展示子字符串的行为。您应该提供更多的例子,因为需求不够明确。我希望现在更清楚。非常感谢。谢谢你的回答,但这不是我要的。使用dict编写代码很棘手,我会使用它(非常感谢!),但问题是如何使用子字符串使页面(可能包含大量元素)变小,正如我在第一篇文章中所问:-)。@Ojmeny啊!我认为你发布的最后一个例子与第一个有关。对于单个数字(在您的例子中是12),很容易找到它在列表中的位置,但您也会说变量总是按1变化。那么,如果变量是12,13,14,15等等,那么你的预期输出是什么呢?列表=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]对于变量12:[2,3,4,5,6,7,8,9,10,12]对于13:[3,4,5,7,8,9,10,11,13]等:-)谢谢Ashwini:-@Ojmeny请将你的回答添加到问题体。
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]
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
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