程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我可以在Python列表上创建“视图”吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决我可以在Python列表上创建“视图”吗??

开发过程中遇到我可以在Python列表上创建“视图”吗?的问题如何解决?下面主要结合日常开发的经验,给出你关于我可以在Python列表上创建“视图”吗?的解决方法建议,希望对你解决我可以在Python列表上创建“视图”吗?有所启发或帮助;

Python标准库中没有“列表切片”类(也不是内置的)。因此,您确实需要一个类,尽管它不必很大-尤其是如果您对“只读”和“紧凑”切片感到满意。例如:

import collections

class ROListSlice(collections.SequencE):

    def __init__(self, aList, start, alen):
        self.aList = aList
        self.start = start
        self.alen = alen

    def __len__(self):
        return self.alen

    def adj(self, i):
        if i<0: i += self.alen
        return i + self.start

    def __getitem__(self, i):
        return self.aList[self.adj(i)]

这有一些局限性(不支持“切片”),但对于大多数目的来说可以。

为了使这个序列R / W你需要添加__setitem____delitem__insert

class ListSlice(ROListSlicE):

    def __setitem__(self, i, v):
        self.aList[self.adj(i)] = v

    def __delitem__(self, i, v):
        del self.aList[self.adj(i)]
        self.alen -= 1

    def insert(self, i, v):
        self.aList.insert(self.adj(i), v)
        self.alen += 1

解决方法

我有很多l。我想创建一个从元素4到6的视图。我可以使用序列切片来实现。

>>> l=range(10)
>>> lv=l[3:6]
>>> lv
[3,4,5]

但是lv是l切片的副本。如果我更改基础列表,lv不会反映更改。

>>> l[4] = -1
>>> lv
[3,5]

反之亦然,我也希望对lv的修改也反映在l中。除此之外,列表大小不会更改。

我不希望为此建立一个大型课程。我只是希望其他Python专家可能知道一些隐藏的语言技巧。理想情况下,我希望它能喜欢C语言中的指针算法。

int lv[] = l + 3;

大佬总结

以上是大佬教程为你收集整理的我可以在Python列表上创建“视图”吗?全部内容,希望文章能够帮你解决我可以在Python列表上创建“视图”吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。