错误:“列表”对象不可调用,为什么?

时间:2019-07-04 23:45:19

标签: python python-3.x

我正在使用python进行测试,并为任务创建此代码 我需要代码来读取两个文件,将第一个文件从大到小排列,然后查看另一个文件中的文件,然后创建另一个文件,两个文件中都重复该文件并进行排序 示例:

第一个文本:

Git-gud,-32
Hogwarts Great hall Wifi,-67
God is my rock,-56
Interwebz,-75
OptimusPrime,-32
gg-wp,-53
UdeS-Alumnos,-90

第二文本:

Que-sucede
Get-off-my-lawn
Git-gud
gg-wp
All the pancakes
My-name-is-lucifer
Optimus-prime
Hogwarts Great hall Wifi

第三文本:

Git-gud,-32
OptimusPrime,-32
gg-wp,-53
Hogwarts Great hall Wifi,-67

当我尝试使用第三个文件的网络创建列表时,出现错误

我不知道怎么了

def redes(contenido, guardadas):
    redes=[]
    i=0
    while i<len(contenido):
        j=0
        while j<len(guardadas):
            if contenido[i][0]==guardadas[j]:
                redes.append(contenido[i])
            j=j+1
        i=i+1
    return redes

启动代码时出现此错误

Traceback (most recent call last):
  File "C:/Users/basty/Desktop/all/Guia y soluciones/textos/Wi-Fi/1.py", line 66, in <module>
    disponibles=redes(redesOrdenadas, guardadas)
TypeError: 'list' object is not callable

这是我的代码

#Wi-Fi
#Función que lee los archivos
def leer(texto):
    texto=texto+'.txt'
    archivo= open(texto,'r')
    contenido= []
    for linea in archivo:
        contenido.append(linea.strip('\n'))
    archivo.close
    return contenido
#Función quitar las comas
def sinComas(contenido):
    i=0
    sinComas=[]
    while i <len(contenido):
        sinComas = sinComas + [contenido[i].split(',')]
        i=i+1
    return sinComas
#Función ordenar por señal
def ordenar(contenido):
    i=0
    while i<len(contenido):
        j=i+1
        while j<len(contenido):
            if int(contenido[i][1])<int(contenido[j][1]):
                aux=contenido[i]
                contenido[i]=contenido[j]
                contenido[j]=aux
            j+=1
        i+=1
    return contenido
#Función guardar redes disponibles para conectar
def redesDisponibles(contenido, guardadas):
    redes=[]
    i=0
    while i<len(contenido):
        j=0
        while j<len(guardadas):
            if contenido[i][0]==guardadas[j]:
                redes.append(contenido[i])
            j=j+1
        i=i+1
    return redes
#Función agregar comas
def agregarComas(redes):
    i=0
    conComas=''
    escribir=[]
    while i<len(redes):
        j=0
        while j<len(redes[i]):
            conComas=','.join(redes[i])
            j=j+1
        escribir.append(conComas+'\n')
        i=i+1
    return escribir
#Función escribir
def escribir(texto):
    return True
#Bloque Principal
#Entrada
redesEncontradas=leer('signal-strenght')
guardadas= leer('networks')
#Proceso
sinComas=sinComas(redesEncontradas)
redesOrdenadas=ordenar(sinComas)
disponibles=redes(redesOrdenadas, guardadas)
conComas=agregarComas(disponibles)

1 个答案:

答案 0 :(得分:0)

Mike Scotty指出了您的主要问题:给var命名与方法相同。我还建议这样的列表理解:

return [x for x in contenido if x in guardadas]

消除了对命名变量的需求。

如果我提供了文本输入,则只需执行以下操作:

t1 = '''Git-gud,-32
Hogwarts Great hall Wifi,-67
God is my rock,-56
Interwebz,-75
OptimusPrime,-32
gg-wp,-53
UdeS-Alumnos,-90'''

t2 = '''Que-sucede
Get-off-my-lawn
Git-gud
gg-wp
All the pancakes
My-name-is-lucifer
Optimus-prime
Hogwarts Great hall Wifi'''

然后

result = [x for x in t1.split('\n') if x.split(',')[0] in t2.split('\n')]

结果如下:

['Git-gud,-32', 'Hogwarts Great hall Wifi,-67', 'gg-wp,-53']