python列表引用_引用列表的一部分-Python

If I have a list in python, how can I create a reference to part of the list? For example:

myList = ["*", "*", "*", "*", "*", "*", "*", "*", "*"]

listPart = myList[0:7:3] #This makes a new list, which is not what I want

myList[0] = "1"

listPart[0]

"1"

Is this possible and if so how would I code it?

Cheers,

Joe

解决方案

You can write a list view type. Here is something I have written as experiment, it is by no means guaranteed to be complete or bug-free

class listview (object):

def __init__(self, data, start, end):

self.data = data

self.start, self.end = start, end

def __repr__(self):

return "" % (type(self).__name__, list(self))

def __len__(self):

return self.end - self.start

def __getitem__(self, idx):

if isinstance(idx, slice):

return [self[i] for i in xrange(*idx.indices(len(self)))]

if idx >= len(self):

raise IndexError

idx %= len(self)

return self.data[self.start+idx]

def __setitem__(self, idx, val):

if isinstance(idx, slice):

start, stop, stride = idx.indices(len(self))

for i, v in zip(xrange(start, stop, stride), val):

self[i] = v

return

if idx >= len(self):

raise IndexError(idx)

idx %= len(self)

self.data[self.start+idx] = val

L = range(10)

s = listview(L, 2, 5)

print L

print s

print len(s)

s[:] = range(3)

print s[:]

print L

Output:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3

[0, 1, 2]

[0, 1, 0, 1, 2, 5, 6, 7, 8, 9]

You may assign to indices in the listview, and it will reflect on the underlying list. However,it does not make sense to define append or similar actions on the listview. It may also break if the underlying list changes in length.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到,Python中的if __name__ == "__main__"是一个常见的用法,用于判断当前模块是否作为主程序运行。当一个Python文件被作为主程序运行时,__name__的值会被设置为"__main__",而当它被作为模块导入时,__name__的值会是模块的名称。这个用法通常用于在模块被导入时不执行一些特定的代码,只有当模块作为主程序运行时才执行。引用\[2\]中的示例代码展示了这个用法,当helper.py被作为主程序运行时,会执行if __name__ == "__main__"下的代码,而当它被其他文件导入时,这部分代码不会执行。同样,引用\[3\]中的示例代码也展示了这个用法,当classPerson.py被作为主程序运行时,会执行if __name__ == "__main__"下的代码,而当它被TestCode.py导入时,这部分代码不会执行。所以,if __name__ == "__main__"可以用来区分模块是作为主程序运行还是被导入。 #### 引用[.reference_title] - *1* *2* [一文弄懂Python中的 if __name__ == __main__](https://blog.csdn.net/sgzqc/article/details/124849467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python中if __name__ == ‘__main__‘用法及原理解析](https://blog.csdn.net/DALEONE/article/details/122267822)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值