将值添加到2D列表

时间:2015-10-23 05:15:08

标签: python

此函数的目的是获取具有int,str和float值的列表,并根据其类型将它们打印在单独的列表中。我究竟做错了什么?它只打印列表中没有任何内容的三个列表。

def organize(orgList):
    result = []
    intList = []  
    floatList = []
    strList = []
    for i in orgList:
        i = str(i)
        if (str.isdigit(i)):
            i == int or float 
            if (i == int(i)):
                i = int(i)
                result.append(intList)
            else:
                i = float(i)
                result.append(floatList)
        else:
            result.append(strList)

    return intList, strList, floatList

3 个答案:

答案 0 :(得分:0)

你在循环中做的第一件事就是将有问题的元素转换为字符串。这完全违背了检查其类型的目的。然后你就有了无意义的i == int or float。然后将对象强制转换回int,如果它首先不是int,则会失败。然后再将其再次投射到int并附加它。然后你检查一个float,它永远不会被满足,因为如果字符串中的所有内容都是数字,你只输入那个块,这将排除'2.6'之类的任何内容,因为.不是一个数字。最重要的是,您实际上从未将i放在任何位置 - 您只需将空list的新引用添加到result

您真的需要阅读official Python tutorial

在此之前,此代码只会检查每个对象的类型,并将其放入相应的list,然后return全部三个:

def organize(orgList):
    intList = []  
    floatList = []
    strList = []
    for i in orgList:
        if isinstance(i, int):
            intList.append(i)
        elif isinstance(i, float):
            floatList.append(i)
        else:
            strList.append(i)
    return intList, strList, floatList

答案 1 :(得分:0)

请注意检查类型的方式和追加方式。试试这个:

def organize(orgList):
    result = []
    intList = []
    floatList = []
    strList = []
    for i in orgList:
        if type(i) == str:
            strList.append(i)
        elif type(i) == float:
            floatList.append(i)
        elif type(i) == int:
            intList.append(i)
    result.append(strList)
    result.append(intList)
    result.append(floatList)
    return result

答案 2 :(得分:0)

你犯了错误:

  1. i = str(i)将所有元素转换为str类型,这不是必需的。只需使用类似type(i) is int的内容来检查类型。
  2. intListfloatListstrList永远不会在您的函数中修改,因此您会获得空列表。
  3. 正确的版本可能是:

    def organize(orgList):
        intList = []  
        floatList = []
        strList = []
        for i in orgList:
            ti = type(i)
            if ti is int:
                intList.append(i)
            elif ti is float:
                floatList.append(i)
            elif ti is str:
                strList.append(i)
        return intList, strList, floatList
    

    较短的版本:

    def organize(orgList):
        intList = [ i for i in orgList if type(i) is int]
        floatList = [ i for i in orgList if type(i) is float]
        strList = [ i for i in orgList if type(i) is str]
        return intList, strList, floatList