繁体   English   中英

TypeError:“ int”对象不支持项目分配7

[英]TypeError: 'int' object does not support item assignment 7

def find_duplicates(inputList, occurrences, errorMessage):
    '''find_duplicates(inputList, occurrences) -> Finds and returns all duplicates in list l
    which occur at least 'occurrences' times
    If none are found then errorMessage is returned'''
    curr = 0
    prev = 0
    occurrencesFound = 0
    duplesFound = []
    inputList = sorted(inputList)
    print(inputList)
    for i in range(len(inputList)):
        prev = curr
        curr = inputList[i]
        occurrencesFound[curr] = 0
        if curr == prev and duplesFound.count(curr) == 0:
            occurrencesFound[curr] += 1
            if occurrencesFound[curr] == occurrences:
                duplesFound.append(curr)
                occurrencesFound = 0
    if duplesFound == []:
        duplesFound = errorMessage
    return duplesFound

这是我编写的Python 3代码,用于返回列表中出现“发生”次数的所有值,如果未找到,则显示选择的错误消息。 但是,这就是我得到的:

Traceback (most recent call last):
  File "C:\Python\Python Homework.py", line 68, in <module>
    print(find_trivial_taxicab_numbers(3))
  File "C:\Python\Python Homework.py", line 56, in find_trivial_taxicab_numbers
    while find_duplicates(intsFound, (n), "Error") == "Error":
  File "C:\Python\Python Homework.py", line 32, in find_duplicates
occurrencesFound[curr] = 0
TypeError: 'int' object does not support item assignment

我可以说出什么是错误,但是我不确定。 我想做的是为列表中的每个不同值单独设置出现次数。 例如,如果我有一个列表[2,2,5,7,7,7,7,8,8,8]我会希望epsesionsFound [2]的结果是2,expressionsFound [5]的结果是1,expressionsFound [7]最终为4,依此类推。

这样,代码随后将检查是否有任何数字至少出现在用户要求的次数之外,然后返回所有数字。 我使用的方法效果不佳,但是...

我想知道的是为什么这是一个错误以及如何能够修复它。 我尝试改为进行为例,而不是更好。 但是,这在“ TypeError:'功能'对象不支持项目分配”中得到了回答。 有任何想法吗?

您在这行中将enceancesFound设置为整数数据类型:

occurrencesFound = 0

您不能为其分配项目,因为它是整数。

如果要为其分配项目,请使其成为字典:

occurancesFound = {}

您正在将occurrencesFound设置为一个int( 0 ),然后尝试将其用作列表( occurrencesFound[curr] = 0 )。 那就是问题所在。 如果要将不同实体的occurrencesFound存储在petitionsFound中,请按以下方式使用它:

occurrencesFound = {}
occurrencesFound[curr] = 0

这将创建一个计数(int)变量的字典,其中curr是关键。

正如其他人提到的那样,您的代码中存在严重的不一致之处:您试图同时使用作为所有对象和列表使用的occurrencesFound

查找列表中重复项的组的简单方法是使用标准模块功能itertools.groupby 您的find_duplicates一个errorMessage arg,但是我建议在调用代码中而不是在查找组的函数中进行错误处理是更干净的方法。

我的find_duplicates收集dict的组,这比使用list更灵活,因为它可以用于各种类型的元素,而不仅仅是整数。 即使您仅收集整数组, dict也比list更好,除非保证这些整数是大致连续的,并且最低整数接近于零(且为非负数)。

from itertools import groupby

def find_duplicates(input_list, occurrences=2):
    input_list = sorted(input_list)
    groups = {}
    for k, g in groupby(input_list):
        # We have to convert iterator `g` to a list to get its length
        glen = len(list(g))
        if glen >= occurrences:
            groups[k] = glen
    return groups

# Test
input_list = [7, 8, 7, 2, 8, 5, 7, 7, 8, 2]

groups = find_duplicates(input_list, 3)
if not groups:
    print('No groups found')
else:
    print(groups)

输出

{8: 3, 7: 4}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM