代码思路是对python Array的类的重写,实现动态数组。不过有点小问题,先Mark起来,debug完再补充进来。
class Array(object):
"""Represents an array."""
def __init__(self, capacity, fillValue = None):
"""Capacity is the static size of the array.
fillValue is placed at each position."""
self._items = list()
for count in range(capacity):
self._items.append(fillValue)
def __len__(self):
"""-> The capacity of the array."""
return len(self._items)
def __str__(self):
"""-> The string representation of the array."""
return str(self._items)
def __iter__(self):
"""Supports iteration over a view of an array."""
return iter(self._items)
def __getitem__(self, index):
"""Subscript operator for access at index."""
return self._items[index]
def __setitem__(self, index, newItem):
"""Subscript operator for replacement at index."""
self._items[index] = newItem
"""
1. 利用动态数组解决数据存放问题
编写一段代码,要求输入一个整数N,用动态数组A来存放2~N之间所有5或7的倍数,输出该数组。
示例:
输入:
N = 100
输出:
5 7 10 14 15 20 21 25 28 30 35 40 42 45 49 50 55 56 60 63 65 70 75 77 80 84 85 90 91 95 98 100
"""
from arrays import Array
# a = Array(5)
#
# print(len(a))
# for i in range(len(a)):
# print(a[i])
class DynamicArray(Array):
"""
capacity 物理长度 即对于给定N=100,则初始化长度为100的数组
logicalSize 逻辑长度,根据其和物理长度的关系决定insert delete 等等
"""
def __init__(self, capacity, fillValue=None, logicalSize=0):
super(DynamicArray, self).__init__(capacity, fillValue=None)
# if fillValue != None:
# for i in range(capacity):
# self._items = fillValue[i]
def produce_array(capacitys, logicalsizes, fillValue=None):
if fillValue == None:
tem = Array(capacitys, fillValue=None)
for i in range(capacitys):
tem[i] = i + 1
logicalsizes += 1
return tem, logicalsizes
else:
tem = Array(capacitys, fillValue)
for i in range(capacitys):
tem[i] = fillValue[i]
logicalsizes += 1
return tem, logicalsizes
self.array, self.logicalSize = produce_array(capacity, logicalSize)
#
def dynamic_append(self, in_array, value):
if in_array.logicalSize == len(in_array.array):
temp = Array(capacity=len(in_array.array) + 1)
for i in range(in_array.logicalSize):
temp[i] = in_array.array[i]
temp[in_array.logicalSize] = value
in_array = temp
return in_array
#
class OutputX5X7():
def __init__(self):
pass
def __call__(self, length):
self.in_array = DynamicArray(capacity=length)
self.out_array = DynamicArray(capacity=1)
k = 1
for i in range(length):
if self.in_array.array[i] % 5 == 0 or self.in_array.array[i] % 7 == 0:
if k:
self.out_array.array[0] = self.in_array.array[i]
k = 0
else:
self.out_array = self.out_array.dynamic_append(self.out_array, self.in_array.array[i])
self.out_array = DynamicArray(capacity=len(self.out_array), fillValue=self.out_array._items)
return self.out_array
A = OutputX5X7()
print(A(100))

2023年9月11日 08:10 沙发
很有用
2023年9月12日 14:19 1层
@yancy 有用就好,加油