“Python:类对象不支持索引”

2024-06-17 15:31:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实验课程,这是我第一次应用它们

下面是课堂:

class CreateArray:

   def __init__(self):
        array = []
        self.array = array
        print('How many elements?')
        ele = int(input())
        for j in range(ele):
            print('Enter element '+str(j+1))
            uin = int(input())
            array.append(uin)
        print('Array elements are: ')
        print(array)

    def __len__(self):
        return len(self.array)

这是我计划的一部分:

def comparedata(arr1, arr2):
    newlist = []
    arr1. __len__()
    if len(arr1) == len(arr2):
        for i in range(len(arr1)):
            if arr1[i] > arr2[i]: #indexing error occurs here
                newlist.append(arr1[i])

            elif arr1[i] < arr2[i]:
                newlist.append(arr2[i])

            print(newlist)


print('array 1 data: ')
arr1 = CreateArray()
print('array 2 data: ')
arr2 = CreateArray()
print('The two arrays are: ')
print(arr1.array)
print(arr2.array)
print('The greatest elements between the two arrays are: ')
comparedata(arr1,arr2)

我在if arr1[i]>arr2[i]处得到一个错误:

CreateArray object doesn't support indexing

因此函数调用无法执行


Tags: selflenifdefelementsarrayareint
2条回答

这个问题似乎与这里关于堆栈溢出的一些其他问题重复,但希望下面的示例能有所帮助。注意:我使用的是Python 3.7。底线是您需要实现Sequence接口

希望下面的示例会有所帮助:

from collections.abc import Sequence

class MyArray(Sequence):
    def __init__(self, array):
        self.array = array

    def __getitem__(self, i):
        return self.array[i]

    def __len__(self):
        return len(self.array)

    @classmethod
    def from_input(cls):
        array = list()
        number_of_elements = int(input('How many elements? '))
        for i in range(number_of_elements):
            element = int(input("Type an integer"))
            array.append(element)
        return cls(array)

test1 = MyArray.from_input()

# How many elements? 4
# Type an integer: 1
# Type an integer: 2
# Type an integer: 3
# Type an integer: 4

test1[3]

# 4

test2 = MyArray.from_input()

# How many elements? 4
# Type an integer: 0
# Type an integer: 3
# Type an integer: 1
# Type an integer: 5

comparedata(test1, test2)
# [1]
# [1, 3]
# [1, 3, 3]
# [1, 3, 3, 5]

您需要为类编写函数__getitem__,以支持arr[i]语法。例如,如果您查看列表中的文档,您会看到:

|  __getitem__(...)
|      x.__getitem__(y) <==> x[y]

但是,如果您将比较编写为:

if arr1.array[i] > arr2.array[i]:

相关问题 更多 >