Python 如何使用for循环的列表元素中的值自动生成变量?
假设我想使用forloop自动生成一个大标题行的索引,以防止为每个标题写入索引 在一个文件中,我说的是一个有很多水果名称的头。每列都有一个数据,我必须使用索引来访问这些数据,以便进行下游解析。我不想为每个水果名称准备索引,而是想运行forloop动态创建索引值以节省时间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
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作者也可能思考并知道可能存在的危险或使用此方法
- 危险在于您总是希望
在编写的python脚本中可见。准备一个动态变量_name会很好,但如果出现任何问题,在回溯时可能会导致问题李>variable\u name
- 由于从未输入变量名,因此如果出现任何问题(尤其是在大型程序中),跟踪和调试将是一场噩梦,比如变量值类似于
或2betateta
,这不是一个有效的变量名。这是我的想法请其他人插话解释为什么python中没有引入此功能?*ping^pong
- Dict方法解决了这个问题,因为我们有
的起源记录,但仍然存在有效变量名与无效变量名的问题变量名
dict方法
获取一些提供的答案,看看我是否能想出一个非常简单的综合方法来实现这一点
谢谢大家 内置函数
exec
和eval
与此相关
从:
:“表达式参数作为Python表达式进行分析和计算”eval
:“此函数支持动态执行Python代码”exec
exec
,如下所示:
对于水果中的水果:
exec('{0}_idx=fruits.index(“{0}”)'.format(fruit))
(注意,我们需要在第二个{}
中加引号,否则Python会认为您试图获取名为apple
的某个变量的索引,而不是传递字符串'apple'
)
如果您现在在控制台中键入
apple\u idx
(例如),它应该返回0
内置函数exec
和eval
从:
:“表达式参数作为Python表达式进行分析和计算”eval
:“此函数支持动态执行Python代码”exec
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)