Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表上的动态子字符串。变量前的10个元素_Python_Python 2.7_Substring - Fatal编程技术网

Python 列表上的动态子字符串。变量前的10个元素

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

我对动态子字符串有问题。我有一个列表,可以有1000个元素,100个元素,甚至20个元素。我想复制这个列表,它包含从-10到变量的元素。 例如(伪代码):

我不知道怎样才能使它正确。关键是变量总是以1为单位变化

以下是我的代码:

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