变量不是自动递增的Python

变量不是自动递增的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',

我必须根据数据类型对这个列表(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',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循环上方的变量解决了此问题,谢谢@罗德里戈卡诺如果你有新的问题,请发布一个新的帖子。谢谢