Python:TypeError:-:';列表';和';int';

Python:TypeError:-:';列表';和';int';,python,Python,我正在编写一个函数delta,它包含两个参数:电话簿的分区和包含电话用户姓氏首字母分布的列表或元组。该函数必须返回电话用户姓氏首字母的给定分布的电话簿给定分区的增量 A B C D E F G H I J K L M N 0 P Q R S T U V W X Y Z 16 4 17 10 15 4 4 6 7 14 9 17 27 6 1 9 0 12 20 8 0 3 4 0 3 4 例如:总共有220个姓名,电话公司决定印刷4卷。理想情况下,每个卷都应该包含220/4=

我正在编写一个函数delta,它包含两个参数:电话簿的分区和包含电话用户姓氏首字母分布的列表或元组。该函数必须返回电话用户姓氏首字母的给定分布的电话簿给定分区的增量

A  B C  D  E  F G H I J  K L  M  N 0 P Q R  S  T U V W X Y Z
16 4 17 10 15 4 4 6 7 14 9 17 27 6 1 9 0 12 20 8 0 3 4 0 3 4
例如:总共有220个姓名,电话公司决定印刷4卷。理想情况下,每个卷都应该包含
220/4=55
名称。一种可能的分区是A-dej K-opz,其计数为47、50、60和63个名称。在绝对值中,这些计数偏离了8、5、5和8个名称,偏离了理想的每卷55个名称。我们将这些偏差的总和称为电话簿分区的增量。对于这个分区,delta因此等于26

我的代码中有以下错误:

TypeError: unsupported operand type(s) for -: 'list' and 'int'
有人知道我做错了什么吗?错误出现在最后一个函数的最后几行
delta()
。我还尝试了创建列表元素的整数或列表的字符串,但仍然不起作用

def counts(seq):
    '''
    >>> counts('A-D E-J K-O P-Z')
    (4, 6, 5, 11)
    >>> counts('A-G H-O P Q-Z')
    (7, 8, 1, 10)
    >>> counts('A-D E-K L-P Q-Z')
    (4, 7, 5, 10)
    >>> counts('A-D F-K L-P Q-Z')
    Traceback (most recent call last):
    AssertionError: invalid partitioning
    '''
    r = str(seq)

    input_string = r.split(' ')

    q = []
    for dletter in input_string:
        if '-' in dletter:
            q.append(ord(dletter[2]) - ord(dletter[0]) + 1)
        else:
            q.append(1)


    assert sum([x for x in q]) == 26, "invalid partitioning"

    chars = "abcdefghijklmnopqrstuvwxyz"
    chars = chars.upper()
    for char in chars:
        count = r.count(char)
    assert count == 1, "invalid partitioning"

    return (tuple(q))


def delta(seq, names):
    '''
    >>> names = (16, 4, 17, 10, 15, 4, 4, 6, 7, 14, 9, 17, 27, 6, 1, 9, 0, 12, 20, 8, 0, 3, 4, 0, 3, 4)
    >>> delta('A-D E-J K-O P-Z', names)
    26.0
    >>> delta((7, 8, 1, 10), names)
    94.0
    >>> delta('A-D E-K L-P Q-Z', names)
    18.0
    >>> delta(42, names)
    Traceback (most recent call last):
    AssertionError: invalid partitioning
    '''

    r = counts(seq)

    import itertools
    q = list(itertools.accumulate(r))

    j = list()

    for i in q:
        f = sum(names[:i])
        j.append(f)

    s = [t - s for s, t in zip(j, j[1:])]
    d = [j[:1]]

    k = d + s

    g = list(abs(x - 55) for x in k)

    n = float(sum(g))

    return n

d=[j[:1]]
更改为
d=j[:1]


g=list(k中x的abs(x-55)
变量
x
是一个列表,因为
d=[j[:1]]

d=[j[:1]]
是多余的,因为
j[:1]
已经是一个列表。
k=j[:1]+s