Python 如何使用for循环的列表元素中的值自动生成变量?

Python 如何使用for循环的列表元素中的值自动生成变量?,python,list,for-loop,indexing,Python,List,For Loop,Indexing,假设我想使用forloop自动生成一个大标题行的索引,以防止为每个标题写入索引 在一个文件中,我说的是一个有很多水果名称的头。每列都有一个数据,我必须使用索引来访问这些数据,以便进行下游解析。我不想为每个水果名称准备索引,而是想运行forloop动态创建索引值以节省时间 data = apple banana orange genus:x,species:b genus:x,species:b

假设我想使用forloop自动生成一个大标题行的索引,以防止为每个标题写入索引

在一个文件中,我说的是一个有很多水果名称的头。每列都有一个数据,我必须使用索引来访问这些数据,以便进行下游解析。我不想为每个水果名称准备索引,而是想运行forloop动态创建索引值以节省时间

data = 

      apple                     banana              orange
      genus:x,species:b    genus:x,species:b     genus:x,species:b
      genus:x,species:b    genus:x,species:b     genus:x,species:b
      variety:gala,pinklady,...  variety:wild,hybrid...   variety:florida,venz,
      flavors:tangy,tart,sweet..
      global_consumption:....
      pricePerUnit:...
      seedstocks:.....
      insect_resistance:.....
      producer:....


# first I convert the header into list like this:

for lines in data:
    if 'apple' in lines:
        fruits = lines.split('\t')
        # this will give me header as list:
        # ['apple', 'banana', 'orange']

        # then create the index as:           
        for x in fruits:
            str(x) + '_idx' = fruits.index(x)  
            # this is where the problem is for me .. !??   
            # .. because this is not valid python method
            print(x)

            # if made possible, new variable are created as
            apple_idx = 0, banana_idx = 1 ... so on

# Now, start mining your data for interested fruits
     data = lines.split('\t')
     apple_values = data[apple_idx]
     for values in apple_values:
          do something ......

     same for others. I also need to do several other things.

Make sense?? 
如何才能做到这一点?以一种非常简单的方式

后期编辑:在阅读了大量内容后,我意识到可以使用bash中另一个变量的
值(字符串)
创建一个
变量名

但是,正如我所想,在python中是不可能的。我的直觉是,在python编程语言中准备此方法是可能的(如果被黑客攻击或作者决定),但python作者也可能思考并知道可能存在的危险或使用此方法

  • 危险在于您总是希望
    variable\u name
    在编写的python脚本中可见。准备一个动态变量_name会很好,但如果出现任何问题,在回溯时可能会导致问题
  • 由于从未输入变量名,因此如果出现任何问题(尤其是在大型程序中),跟踪和调试将是一场噩梦,比如变量值类似于
    2betateta
    *ping^pong
    ,这不是一个有效的变量名。这是我的想法请其他人插话解释为什么python中没有引入此功能?
  • Dict方法解决了这个问题,因为我们有
    变量名
    的起源记录,但仍然存在有效变量名与无效变量名的问题
我将使用
dict方法
获取一些提供的答案,看看我是否能想出一个非常简单的综合方法来实现这一点


谢谢大家

内置函数
exec
eval
与此相关

从:

  • eval
    :“表达式参数作为Python表达式进行分析和计算”
  • exec
    :“此函数支持动态执行Python代码”
实际上,您的问题只需要
exec
,如下所示:

对于水果中的水果:
exec('{0}_idx=fruits.index(“{0}”)'.format(fruit))

(注意,我们需要在第二个
{}
中加引号,否则Python会认为您试图获取名为
apple
的某个变量的索引,而不是传递字符串
'apple'


如果您现在在控制台中键入
apple\u idx
(例如),它应该返回
0

内置函数
exec
eval

从:

  • eval
    :“表达式参数作为Python表达式进行分析和计算”
  • exec
    :“此函数支持动态执行Python代码”
实际上,您的问题只需要
exec
,如下所示:

对于水果中的水果:
exec('{0}_idx=fruits.index(“{0}”)'.format(fruit))

(注意,我们需要在第二个
{}
中加引号,否则Python会认为您试图获取名为
apple
的某个变量的索引,而不是传递字符串
'apple'


如果您现在在控制台中键入
apple\u idx
(例如),它将返回
0

编辑:现在问题已经编辑好,如果有时间,我将稍后提供更有用的答案

我不完全理解你到底想做什么,但这里有一些事情可能会有所帮助

要认识到的是,您已经有了一个对象,其中包含了您想要的所有信息:一个包含所有对象名称的列表。就其本质而言,您的名称列表中已经包含索引。数据存在;它就在那里。您需要做的是学会以正确的方式访问这些信息

您可能需要的是。此函数生成一个包含列表索引和列表内容的两元组(一对对象):

for idx,fruit in enumerate(fruits): 
    print(fruit+'_idx: ', idx)
没有理由将这些索引存储在其他数据结构中;它们已经在您的列表中

如果您坚持要通过某个名称(字符串)访问某个任意值,则应使用字典或
dict

fruit_dict = dict()
fruit_dict['apple'] = 1

但是,由于您要查找索引值,因此这样做似乎有点奇怪,因为
dict
本质上是非有序的。正如我所说,您已经知道列表中的索引。第二次存储带有名称的索引可能没有什么意义,尽管可能会出现您需要的情况编辑:现在问题已经编辑好了,如果有时间的话,我会提供一个更有用的答案

我不完全理解你到底想做什么,但这里有一些事情可能会有所帮助

要认识到的是,您已经有了一个对象,其中包含了您想要的所有信息:一个包含所有对象名称的列表。就其本质而言,您的名称列表中已经包含索引。数据存在;它就在那里。您需要做的是学会以正确的方式访问这些信息

您可能需要的是。此函数生成一个包含列表索引和列表内容的两元组(一对对象):

for idx,fruit in enumerate(fruits): 
    print(fruit+'_idx: ', idx)
没有理由将这些索引存储在其他数据结构中;它们已经在您的列表中

如果您坚持要访问某个任意val
for fruit in fruits:
    data_list = data_dict[fruit]
    for data_line in data_list:
        print(data_line)
for fruit in data_dict:
    print(fruit)
for data_list in data_dict.values():
    print(data_list)
for fruit,data_list in data_dict.items():
    print(data_list)
for fruit in data_dict.keys():
    # remove it
    data_dict.pop(fruit)