如何在Python中自动递增常量列表索引的值?
这是我在StackOverflow上的第一个问题,我对Python完全是个新手——请多多包涵。我确实尝试了很多方法在网上寻找解决方案——可能没有使用正确的搜索词吧?
为了能够用符号来表示数组中的条目,我想定义一个索引列表,比如:
USRNM_IDX = 0
TIMSTP_IDX = 1
MSISDN_IDX = 2
有时候,我可能需要对这个列表进行一些修改:重新排序、插入新的值或删除已有的值:
USRNM_IDX = 0
AMNT_IDX = 1
TIMSTP_IDX = 2
MSISDN_IDX = 3
这时我就需要手动更改索引,以保持它们的正确性——这很繁琐,也容易出错。肯定有更好的方法来做到这一点。到目前为止,我能想到的最好方法是:
run_idx = 0
USRNM_IDX = run_idx; run_idx += 1
TIMSTP_IDX = run_idx; run_idx += 1
MSISDN_IDX = run_idx; run_idx += 1
AMNT_IDX = run_idx; run_idx += 1
我觉得这并不算太美观。也许在Python中还有其他完全不同的写法,我还不太了解?提前谢谢你的帮助。
非常感谢大家——我想你们说的XY问题是对的。这里是“更大的问题”。
这个Python程序会处理一些日志文件,并把信息存储在一个字典里。字典中的每个条目本身也是一个数组。现在我想“符号性地”索引这个数组,比如:
trkey_dict[trkey][MSISDN_IDX] = this_msisdn
trkey_dict[trkey][CARRIER_IDX] = this_carrier
trkey_dict[trkey][TIMSTP_IDX] = this_timestamp
如果我没学错,数组只能用整数来访问——所以我在寻找一种聪明的方法来创建一些变量(可以是常量——但可惜了……),用有意义的名字来代替字面值,以便在访问数组元素时不使用具体的数字。这也让我可以很容易地重新排列数组的布局,最终以正确的顺序输出我的结果列表,比如:
for trkey in trkey_dict.keys(): print trkey,";"," ; ".join(trkey_dict[trkey])
目前我正在努力更好地理解Python提供的其他聚合数据类型,比如元组、集合等等——不确定这些是否能提供更好的解决方案。
由 DonCallisto 给出的答案会让创建索引列表变得非常简单。我甚至不需要使用插入,因为索引列表不会动态变化。所以
mylist = ['USRNM_IDX', 'TIMSTP_IDX', 'MSISDN_IDX']
会非常好用。然而,访问数组元素时就总是需要使用
mylist.index('USRNM_IDX')
,这会导致比如
trkey_dict[trkey][mylist.index('MSISDN_IDX')] = this_msisdn
trkey_dict[trkey][mylist.index('CARRIER_IDX')] = this_carrier
trkey_dict[trkey][mylist.index('TIMSTP_IDX')] = this_timestamp
,看起来又不太美观。
非常感谢所有分享评论和答案的人。随着我学习更多,会更新的。
1 个回答
2
你为什么不使用列表,进行基于列表的操作呢?
比如说:
mylist = ['USRNM_IDX', 'TIMSTP_IDX', 'MSISDN_IDX']
mylist.insert(1, 'AMNT_IDX')
如果你需要某个值(也就是索引),你可以使用:
mylist.index('TIMSTP_IDX')