【问题标题】:Call Variables From For Loop从 For 循环调用变量
【发布时间】:2021-01-20 21:08:16
【问题描述】:

我一直在尝试遍历for循环以从字符串中调用变量,这是可以做到的吗?

我想要一些可以这样工作的代码。

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

我打算使用这个列表来合并两个列表。

nomina=[]

这是发生错误的地方,我尝试了 %d 和 +i 但它不起作用。

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

【问题讨论】:

标签: python list append nested-lists


【解决方案1】:

你可以试试这个。

empleado0=["Diego Mondragón", 1, 50, "M"]
empleado1=["Juan Esteban Aristizabal", 1, 37, "M"]
nomina = []
nomina = [v for k,v in globals().items() if k.startswith('empleado')]
print(nomina)

【讨论】:

    【解决方案2】:

    您不能添加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'"]]
    

    【讨论】:

    • 感谢您的反馈。如果我想动态保存每个列表值,即从文件中读取,或执行其他结构化任务,有没有办法使用增量值或类似值从前缀名称 + 后缀创建变量名称?在C语言中非常有用...
    • 我认为这不是一个好主意(变量的扩散),并且没有已知的需要。只需创建一个循环,从文件中读取变量empleado 并附加到nomina
    猜你喜欢
    • 2016-08-31
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多