变量不是自动递增的Python
我必须根据数据类型对这个列表(Lista变量)进行分类,只要我选择一个特定的[]进行分类,代码就可以工作,但是for和if循环中的I在每个循环之后都没有增加变量不是自动递增的Python,python,Python,我必须根据数据类型对这个列表(Lista变量)进行分类,只要我选择一个特定的[]进行分类,代码就可以工作,但是for和if循环中的I在每个循环之后都没有增加 \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 清单A=[55.5,'hola','abc',10,'5','x5',0.25,['A',2,1.5],5,2,5.3,'AEIOU',('perro','gato','pollo'),[1,2,3',
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
清单A=[55.5,'hola','abc',10,'5','x5',0.25,['A',2,1.5],5,2,5.3,'AEIOU',('perro','gato','pollo'),[1,2,3',1001,['A',1],'mundo','01/10/2015',20080633,'2.5',0.123,(1,2,'A','B')]
lista_clasificable=len(lista)
def分类卡(列表可分类):
对于范围(0,len(Lista_可分类))中的Lista:
i=0
lista_字符串=[]
lista_int=[]
lista_float=[]
lista_tuple=[]
lista_list=[]duh
如果类型(列表可分类[i])为str:
lista\u string.append(lista\u可分类[i])
i+=1
elif类型(列表可分类[i])为int:
lista_int.append(lista_可分类[i])
i+=1
elif类型(列表可分类[i])为浮动:
lista\u float.append(lista\u可分类[i])
i+=1
elif类型(列表可分类[i])为列表:
lista\u list.append(lista\u可分类[i])
i+=1
elif类型(列表可分类[i])是元组:
lista\u tuple.append(lista\u可分类[i])
i+=1
返回'Su Lista contiente los siguientes ints',Lista_int,'Sus Strings son:',Lista_string,'Sus float son:',Lista_float,'Sus listas son:',Lista_list,'Y Sus tuplas son:',Lista_tuple
打印(clasificar(Lista))
您反复重置i。它在for循环中,因此对于每个项目,i首先设置为0。您需要将其放在for循环之前:
i=0
for Lista in range(0,len(lista_clasificable)):
...
请参阅MSW对您的第二个问题的评论。你每次都会覆盖主列表,我错过了
不过,这可不是蟒蛇。不要获取列表的长度并使用此设置跟踪索引,只需执行以下操作:
for item in Lista:
do something
Python可以直接在列表中循环-您不需要使用索引。在for循环的每次迭代中,您都将i重置为零。将
i=0
放在for循环上方。这是一个更干净的版本。我解释这件事不是希望你能学到。如果手边的手册无法解答问题,请提问。对不起,如果我把西班牙语弄糟了
# a little more pythonically and far less repetitious
def classificar(p, types):
# create a dict of lists such that dict[typename] = []
lists = dict()
for t in types:
lists[t.__name__] = []
# for all of the elements in p, assign them to a type list
# if applicable
for x in p:
for t in types:
if type(x) == t:
lists[t.__name__].append(x)
return lists
input = [55.5,'hola','abc',10,'5','x5',0.25,['A',2,1.5],5,2,5.3,'AEIOU',
('perro','gato','pollo'), [1,2,3], 1001, ['a', 1],
'mundo','01/10/2015',20080633,'2.5',0.123,(1,2,'A','B')]
types = [str, int, float, tuple, list]
lists = classificar(input, types)
print('Su lista contiente los siguientes:')
for type in types:
print(' ', type.__name__, lists[type.__name__])
变量将在每个循环中重新分配。整个循环结构也是。。奇怪。这不仅奇怪,而且荒谬。用几个类型来分隔异构列表?我想不出在什么情况下这会有用(除非任务就是这样做)。。。。第一学期的cs学生,作业就是要做到这一点。如果你使用
defaultdict
,你可以将循环简化为以下代码:对于列表中的元素可分类:类别[str(type(element)。\uuuuu name\uuu]=element
非常感谢,现在它跳过了第一个和最后一个之间的所有项目,只对它们进行分类。它也会在每次迭代中清空列表。我不明白为什么会发生这种情况,但您在这里的设置非常不符合pythonesque。不要获取列表的长度并使用此设置跟踪索引,只需执行如下操作:for list中的项a:do some Python可以直接循环列表-您不需要使用索引。@AustinC是的,更改for循环上方的变量解决了此问题,谢谢@罗德里戈卡诺如果你有新的问题,请发布一个新的帖子。谢谢