【发布时间】:2021-10-21 03:35:36
【问题描述】:
Python 在__getitem()__、__setitem()__、__delitem()__ 中没有列表索引参数的功能。由于我长期使用 R 语言,使用列表索引看起来很自然。我知道有pandas 或numpy 但是更改类型很麻烦。并且需要导入额外的包!
>>> import numpy as np
>>> lst = [1,2,3,4,5]
>>> np.array(lst)[[0,3,4]]
array([1, 4, 5])
这是我的建议。
class list2(__builtins__.list):
def __getitem__(self, x):
if isinstance(x, __builtins__.list):
#print(x)
return [__builtins__.list.__getitem__(self, y) for y in x]
else:
return __builtins__.list.__getitem__(self,x)
def __setitem__(self, index, elem):
if isinstance(index, __builtins__.list):
if isinstance(elem, __builtins__.list):
for i,x in zip(index, elem):
__builtins__.list.__setitem__(self, i, x)
else:
for i in index:
__builtins__.list.__setitem__(self, i, elem)
#self[i] = x
else:
__builtins__.list.__setitem__(self, index, elem)
def __delitem__(self, index):
if isinstance(index, __builtins__.list):
for i in sorted(index, reverse = True):
__builtins__.list.__delitem__(self, i)
#self[i] = x
else:
__builtins__.list.__delitem__(self, index)
好像没问题。
>>> l = list2(['a', 'b', 'c', 'd', 'e'])
>>> l[[2,3]]
['c', 'd']
>>> l[[2,3]]= ['-', '-']
>>> l
['a', 'b', '-', '-', 'e']
>>> del l[[0,3]]
>>> l
['b', '-', 'e']
但是有什么陷阱吗?还是有什么需要改进的地方?
【问题讨论】:
标签: python r list function methods