检查列表中的项目类型是否相同并执行任务

时间:2015-11-27 01:11:49

标签: python string list types integer

我希望能够创建一个获取列表的函数,检查列表中的每个项目是否属于某种类型(一次一个项目),如果是,则执行计算。对于这个特定的函数,我想计算整数列表的乘积。

我的功能:

def multpoly(items):
    typeInt = []
    total = 1
    for i in list:
        if type(i) is int:
            total = total * i
        elif type(i) is str:
            typelist.append(i)
        elif type(i) is list:
            typelist.append(i)
    return total
    return listInt

items = [1,2,3,4,5]
stringitems = ["1","2","3"]
listitems = [[1,1],[2,2]]

print(multpoly(items))
print(multpoly(stringitems))
print(multpoly(listitems))

我还希望能够创建相同的函数,将列表更改为字符串列表并加入它们,并将列表更改为列表列表并将它们连接起来。

此当前功能不起作用。我收到一个错误 - “'type'对象不可迭代”。

如果有人可以提出修复建议或者可以解释发生了什么事情就会很棒! :)

1 个答案:

答案 0 :(得分:2)

您正在尝试迭代list,但参数名为items。此外,i将是int,但实际上不是int本身;您需要isinstance(i, int)type(i) is int。最后,您无法将str添加到inttotal);如果任何项目不是int时目标是失败,则需要在类型检查失败时处理(否则您将跳过该项,但仍报告列表是全部整数)。您可能希望代码更像这样:

# This uses the Py3 style print function, accessible in Py2 if you include
from __future__ import print_function
# at the top of the file. If you want Py2 print, that's left as an exercise

class NotUniformType(TypeError): pass

def multpoly(items):
    total = 1
    for i in items:
        if not isinstance(i, int):
            raise NotUniformType("{!r} is not of type int".format(i))
        total *= i
    return total

try:
    print(multpoly(items), "Items in list are integers"))
except NotUniformType as e:
    print("Items in list include non-integer types:", e)