簡體   English   中英

Python function 返回“無”列表

[英]Python function return 'None' list

我有一個 function 可以從列表中刪除重復項,如果刪除了,則用另一個列表的另一個條目再次填充那些空白,其中包含所有可能的條目。

現在,我有一個 function 可以完成這項工作,但我不知道為什么,當我調用它時將完整列表不重復地存儲在另一個列表中時,它顯示為“無”。 但它工作正常。 這是 function:

def elimina_Rep(dondeborrar, cantidadNecesaria, fichcompleto):
    sinRep = []                                                 # Donde almacenaremos las NO repetidas
    sinRep_AUX = []                                             # Para borrar en la borrada, (varios ciclos de borrado)
    for elem in dondeborrar:                                    # Primera busqueda de elementos duplicados
        if(elem not in sinRep): sinRep.append(elem)             # Obtenemos una lista sin repeticiones
    if sinRep == dondeborrar : pass                             # Comprobamos que haya diferencia de cantidad entre ambas
    else:
        while(sinRep != sinRep_AUX):
            dif = (cantidadNecesaria - len(sinRep))             # Obtenemos cuantos elementos hemos borrado
            for i in range(0,dif):                              # Generamos tantas nuevas entradas como las que hemos borrado
                sinRep.append(random.choice(fichcompleto))      # Obtenemos una nueva lista completa (pero con posibles repeticiones)    
            for j in sinRep:                                    # Comprobamos que no haya repeticiones de la primera busqueda
                if(j not in sinRep_AUX):                        # Segunda busqueda de elementos duplicados  
                    sinRep_AUX.append(j)                        # Obtenemos una lista sin repeticiones sinRep_AUX desde la primera sin rep  
            if(sinRep == sinRep_AUX): 
                return sinRep_AUX
            else:
                sinRep = sinRep_AUX
                sinRep_AUX = []  

如果我在 function 的末尾打印sinrep_AUX (最終正確列表)的內容一切正常,問題出現在調用存儲它的時候。

def gen_Preg(asignatura, porcentaje):
    preguntas = []                                              # Creamos una lista vacia para alamcenar las preguntas
    porc = int((porcentaje/100)*totalpreguntas)                 # Obtenemos cuantas preguntas necesitamos de esa asignatura por %

    # Bucle for para obtener y escribir la 1a vez (con posibles duplicaciones)
    with open(asignatura, 'r') as aPreg:
        fichero = aPreg.read().strip().splitlines()             # Obtenemos el fichero sin posibles espacios
        for i in range(0,porc):
            preguntas.append(random.choice(fichero))

    random.shuffle(preguntas)                                   # Mezclamos las preguntas generadas
    preg_filt = elimina_Rep(preguntas, porc, fichero)           # Tenemos un archivo con preguntas sin repeticiones
    print(preg_filt)

在這里,第一行顯示 print sinRep_AUX from function elimina_Rep的內容,最后一行顯示preg_filt的內容,我想這是存儲 function 返回列表的列表,當我調用它時

['Como te llamas?', 'Donde vives?', 'Como tomas apuntes?']
None

正如我在其他帖子中看到的那樣,我嘗試將返回行從return sinRep_AUXreturn elimina_Rep(dondeborrar, cantidadNecesaria, fichcompleto) ,但它不起作用

你只在if sinRep == dondeborrar失敗時返回一些東西,然后在循環中if(sinRep == sinRep_AUX)成功。

您可以通過將return語句移動到 function 的末尾來解決這些問題。

def elimina_Rep(dondeborrar, cantidadNecesaria, fichcompleto):
    sinRep = []                                                 # Donde almacenaremos las NO repetidas
    sinRep_AUX = []                                             # Para borrar en la borrada, (varios ciclos de borrado)
    for elem in dondeborrar:                                    # Primera busqueda de elementos duplicados
        if(elem not in sinRep): sinRep.append(elem)             # Obtenemos una lista sin repeticiones
    if sinRep == dondeborrar : pass                             # Comprobamos que haya diferencia de cantidad entre ambas
    else:
        while(sinRep != sinRep_AUX):
            dif = (cantidadNecesaria - len(sinRep))             # Obtenemos cuantos elementos hemos borrado
            for i in range(0,dif):                              # Generamos tantas nuevas entradas como las que hemos borrado
                sinRep.append(random.choice(fichcompleto))      # Obtenemos una nueva lista completa (pero con posibles repeticiones)    
            for j in sinRep:                                    # Comprobamos que no haya repeticiones de la primera busqueda
                if(j not in sinRep_AUX):                        # Segunda busqueda de elementos duplicados  
                    sinRep_AUX.append(j)                        # Obtenemos una lista sin repeticiones sinRep_AUX desde la primera sin rep  
            if(sinRep == sinRep_AUX): 
                break
            else:
                sinRep = sinRep_AUX
                sinRep_AUX = []  
    return sinRep_AUX

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM