首页 > 解决方案 > Call Variables From For Loop

问题描述

I have been trying to iterate through a for loop to call variables from strings, is this something that can be done?

I want to have some code that works as so.

empleado0 = ["Diego Mondragón", 1, 50, "M"]
empleado1 = ["Juan Esteban Aristizabal", 1, 37, "M"]

I was going to use this list to merge both lists.

nomina=[]

This is where the error occurs, I have tried %d and +i but it does not work.

for i in range(2):
    nomina.append(empleado'i')
print(nomina)

标签: pythonlistappendnested-lists

解决方案


您无法添加empleado[i],因为那将是姓名、性别等。每次您有新员工时,将其分配给相同的变量empleado并在循环中将其附加到nomina. 您不想在代码中包含变量empleado1等,因为如果员工人数发生变化,这将不起作用。

nomina=[]

empleado=["Diego Mondragón", 1, 50, "M"]
nomina.append(empleado)


empleado=["Juan Esteban Aristizabal", 1, 37, "M"]
nomina.append(empleado)

for em in nomina:
    print(em)

输出:

['Diego Mondragón', 1, 50, 'M']
['Juan Esteban Aristizabal', 1, 37, 'M']
 

假设您从文件中读取

 Diego Mondragon, 1, 50, 'M'
 Juan Esteban Aristizabal, 1, 37, 'M'

成一个列表lines

f = open("c:/test.txt",'r')
lines=f.readlines()
lines

输出:

["Diego Mondragon, 1, 50, 'M'\n", "Juan Esteban Aristizabal, 1, 37, 'M'\n"]

现在摆脱额外的换行符并检查每一行的类型:

for l in lines:
    l=l.strip()   
    print(l, type(l))

输出:

Diego Mondragon, 1, 50, 'M' <class 'str'>
Juan Esteban Aristizabal, 1, 37, 'M' <class 'str'>

所以我们已经清理了,并且知道结果行是一个字符串。但是每个子字符串仍然有额外的空格,我们应该删除:

# turn string into list
empleado = lines[0].strip().split(',')
print(empleado)

#clean up extra spaces
emp2=[]
for e in empleado:
    emp2.append(e.strip())
    
print(emp2)    

输出:

['Diego Mondragon', ' 1', ' 50', " 'M'"]
['Diego Mondragon', '1', '50', "'M'"]

把它们放在一起:

f = open("c:/test.txt",'r')
lines=f.readlines()
nomina=[]

for l in lines:
    l=l.strip()
    empleado=l.split(',')
    emp2=[]
    for e in empleado:
        emp2.append(e.strip())
    nomina.append(emp2)
    
    
print(nomina)    

输出:

[['Diego Mondragon', '1', '50', "'M'"], ['Juan Esteban Aristizabal', '1', '37', "'M'"]]

推荐阅读