【发布时间】:2017-06-03 00:21:48
【问题描述】:
假设我想使用 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 中另一个变量的 value(string) 创建 variable_name:
how to use a variable's value as other variable's name in bash
但是,正如我所想的那样,在 python 中是不可能的。我的直觉是,可以在 python 编程语言中准备这种方法(如果被黑或作者决定),但也有可能是 python 的作者想到并知道可能的危险或使用这种方法。
- 危险在于您总是希望
variable_name在编写的python 脚本中可见。准备一个动态的 variable_names 会很好,但是如果出现任何问题,它可能会在回溯时导致问题。 - 由于从未输入变量名,因此如果出现任何问题(尤其是在大型程序中),跟踪和调试将是一场噩梦,比如当 variable_value 类似于
2BetaTheta或*ping^pong这不是有效的变量名。这是我的想法。 请其他人加入,为什么 python 中没有引入此功能? - Dict 方法解决了这个问题,因为我们有
variable_name的来源记录,但变量名有效与无效的问题仍然没有消失。
我将使用dict method 获取一些提供的答案,看看我是否可以找到一种非常简单全面的方法来实现这一点。
谢谢大家!
【问题讨论】:
-
这是XY problem- 意思是,您是在询问您认为什么是您要解决的问题的好解决方案,而不是询问您要解决的实际问题。没有理由以您尝试的方式命名许多具有不同名称的变量。您真正想要完成的事情是什么?
-
我想自动创建一个变量,其中变量名是 (x-name + '_idx'),它的值是它在该列表中的位置。
-
也许你可以创建一本字典?然后你可以像
dict["apple"]一样访问它,你就得到了对应的索引。 -
好吧,但是你为什么要这样做?你想完成什么?
-
我想,我解释了我想要完成的事情。我正在尝试创建新变量及其值,因为它在列表中的位置,所以当我有 100 行时,我不必为每个变量键入索引。有道理。
标签: python list for-loop indexing