设计并实现一个数组类,要求能够把包含数字的列表、元组或range对象转换为数组,能够使用包含整数的列表作为下标同时返回多个位置上的元素值。
时间: 2024-03-16 07:41:52 浏览: 123
好的,以下是一个简单的数组类的实现,满足你的要求:
```python
class MyArray:
def __init__(self, data):
if isinstance(data, (list, tuple, range)):
self._data = list(data)
else:
raise TypeError("data should be list, tuple or range")
def __getitem__(self, index):
if isinstance(index, int):
return self._data[index]
elif isinstance(index, (list, tuple)):
return [self._data[i] for i in index]
else:
raise TypeError("index should be int, list or tuple")
def __setitem__(self, index, value):
if isinstance(index, int):
self._data[index] = value
elif isinstance(index, (list, tuple)):
for i, v in zip(index, value):
self._data[i] = v
else:
raise TypeError("index should be int, list or tuple")
```
在这个类中,我们定义了一个构造函数,用来初始化数组。构造函数接受一个参数 data,它可以是一个包含数字的列表、元组或 range 对象。如果 data 不属于这三种类型中的任何一种,我们会抛出一个 TypeError 异常。
在类中,我们还重载了 __getitem__ 和 __setitem__ 方法,它们分别用于获取和设置数组中指定位置上的元素值。如果传入的下标是一个整数,那么它返回数组中该位置上的元素值。如果传入的下标是一个列表或元组,那么它返回数组中这些位置上的元素值。这样,我们就可以通过一个列表来获取数组中的多个元素,例如:
```python
arr = MyArray([1, 2, 3, 4, 5])
print(arr[1]) # 输出:2
print(arr[[0, 2, 4]]) # 输出:[1, 3, 5]
```
这里,我们创建了一个 MyArray 类的实例 arr,它的元素值为 [1, 2, 3, 4, 5]。我们可以通过下标来访问数组中的单个元素,例如 arr[1] 可以获取数组中第二个元素的值。我们也可以使用一个列表来获取数组中多个元素的值,例如 arr[[0, 2, 4]] 可以获取数组中第一个、第三个和第五个元素的值。我们还重载了 __setitem__ 方法,它支持给数组中多个位置上的元素赋值,例如:
```python
arr[[1, 3]] = [8, 10]
print(arr[[1, 3]]) # 输出:[8, 10]
```
这段代码会将数组中第二个和第四个元素的值分别修改为 8 和 10。
阅读全文