变量不自动递增Python

时间:2015-09-24 23:20:17

标签: python

我必须根据它们的数据类型对这个列表(Lista变量)进行分类,并且只要我选择一个特定的[]进行分类,代码就可以工作,但是在for循环之后for和if循环中的i不会增加。

__author__ = 'rodrigocano'

Lista = [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 clasificar(lista_clasificable):
    for Lista in range(0,len(lista_clasificable)):
        i = 0
        lista_string = []
        lista_int = []
        lista_float =[]
        lista_tuple = []
        lista_list = [] #duh
        if type(lista_clasificable[i]) is str:
            lista_string.append(lista_clasificable[i])
            i += 1
        elif type(lista_clasificable[i]) is int:
            lista_int.append(lista_clasificable[i])
            i += 1
        elif type(lista_clasificable[i]) is float:
            lista_float.append(lista_clasificable[i])
            i += 1
        elif type(lista_clasificable[i]) is list :
            lista_list.append(lista_clasificable[i])
            i += 1
        elif type(lista_clasificable[i]) is tuple:
            lista_tuple.append(lista_clasificable[i])
            i += 1
    return 'Su Lista contiente los siguientes ints',lista_int,'Sus Strings son:',lista_string,'Sus floats son:',lista_float,'Sus listas son:',lista_list,'Y Sus tuplas son:',lista_tuple

print(clasificar(Lista))

3 个答案:

答案 0 :(得分:2)

你一遍又一遍地重置我。它在你的for循环中,所以对于每个项目,我首先设置为0.你需要把它放在for循环之前:

i=0
for Lista in range(0,len(lista_clasificable)):
    ...

有关您的第二个问题,请参阅MSW的评论。你每次都要覆盖主列表,我错过了。

尽管如此,这是非常不同寻常的。而不是获取列表的长度并使用此跟踪索引的设置,只需执行以下操作:

for item in Lista: 
    do something 

Python可以直接在列表中循环 - 您不需要使用索引。

答案 1 :(得分:0)

您在for循环的每次迭代中将i重置为零。将i=0放在for循环之上。

答案 2 :(得分:0)

这是一个更干净的版本。我不是在解释它,希望你能学到。如果您无法通过手头的手册解决问题,请提出问题。对不起,如果我拙劣的西班牙语。

# 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__])