此函数的目的是获取具有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
答案 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)
你犯了错误:
i = str(i)
将所有元素转换为str
类型,这不是必需的。只需使用类似type(i) is int
的内容来检查类型。intList
,floatList
,strList
永远不会在您的函数中修改,因此您会获得空列表。正确的版本可能是:
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