12.设计并实现一个数组类,要求能够把包含数字的列表、元组或range对象转换为数组,能够使用包含整数的列表作为下标同时返回多个位置上的元素值。
时间: 2024-02-20 11:56:02 浏览: 90
以下是一个扩展了数组类的实现,实现了将列表、元组、range对象转换为数组,并且能够支持使用包含整数的列表作为下标同时返回多个位置上的元素值:
```python
class Array:
def __init__(self, data):
if isinstance(data, list):
self.__data = data[:]
elif isinstance(data, tuple):
self.__data = list(data)
elif isinstance(data, range):
self.__data = list(data)
else:
raise ValueError("Invalid data type")
def __getitem__(self, index):
if isinstance(index, int):
return self.__data[index]
elif isinstance(index, list):
return [self.__data[i] for i in index]
else:
raise ValueError("Invalid index type")
def __setitem__(self, index, value):
if isinstance(index, int):
self.__data[index] = value
elif isinstance(index, list):
for i, v in zip(index, value):
self.__data[i] = v
else:
raise ValueError("Invalid index type")
def __len__(self):
return len(self.__data)
def __str__(self):
return str(self.__data)
```
在上面的代码中,我们对数组类进行了扩展,增加了对使用包含整数的列表作为下标同时返回多个位置上的元素值的支持。我们修改了`__getitem__`和`__setitem__`方法,如果输入的下标是列表,则返回一个列表,包含对应下标的元素值;如果输入的下标是整数,则返回对应下标的元素值。我们同时使用了`zip`函数来实现同时修改多个元素的功能。
使用方法如下:
```python
a1 = Array([1, 2, 3])
a2 = Array((4, 5, 6))
a3 = Array(range(3))
print(a1[0]) # 输出:1
print(a2[1]) # 输出:5
print(a3[2]) # 输出:2
print(a1[[0, 2]]) # 输出:[1, 3]
print(a2[[1, 2]]) # 输出:[5, 6]
print(a3[[0, 1]]) # 输出:[0, 1]
a1[[0, 2]] = [0, 2]
a2[[1, 2]] = [1, 6]
a3[[0, 1]] = [1, 0]
print(a1) # 输出:[0, 2, 3]
print(a2) # 输出:[4, 1, 6]
print(a3) # 输出:[1, 0, 2]
```
在上面的代码中,我们首先创建了三个数组对象`a1`、`a2`和`a3`,分别使用列表、元组和range对象作为输入数据。然后我们分别使用整数和列表作为下标,获取了数组中的某些元素,并使用`print`函数输出元素值。接着我们使用列表作为下标,修改了数组中的某些元素,并使用`print`函数输出数组的字符串表示。
阅读全文