【问题标题】:Most efficient way to cycle through all list[x]'s without going out of range?在不超出范围的情况下循环遍历所有列表 [x] 的最有效方法?
【发布时间】:2012-08-24 12:34:41
【问题描述】:

我正在传递一个最多包含 6 个条目的列表。如果列表短于 6,我需要将每个条目分配给不同的 var 而不会超出范围。

所以我需要:

var_1 = list[0]
var_2 = list[1]
var_3 = list[2]
var_4 = list[3]
var_5 = list[4]
var_6 = list[5]

var 可以预先指定为 None 或(最好)做

var 3 = list[2] or None

【问题讨论】:

  • 并且不要使用 Python 类型的变量命名变量,例如 'list'
  • 没有字典,因为我需要保留输入顺序。
  • 然后呢?使用数字增加的键......你的意思是?
  • 列表已经设置好了。我需要将 var_1-3 分配给 my_list[0]-[5]。如果它是一个字典,我可以做 var_1 = my_dict.get('1') 但我喜欢这个列表。
  • 那为什么不使用 OrderedDict 呢?

标签: python list for-loop var


【解决方案1】:

改用字典。

lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
dct = {'var_%s'%(i+1) : val for i, val in enumerate(lst)}

dct['var_1'] #accessing fist variable
>>> 'a'
dct['var_11']
>>> 'k'
dct['var_12']
>>> KeyError: 'var_12'

注意:如果你真的,真的坚持将它们作为变量,你可以这样做locals().update(dct)。但我不推荐。

【讨论】:

  • 为什么投反对票?这类问题一般用dict来解决。
  • 修改 locals() 不起作用(除非你在 locals() == globals() 的全局命名空间中)
【解决方案2】:

使用list作为变量名是个坏主意,所以我改成了lst

var_1, var_2, var_3, var_4, var_5, var_6 = lst + [None] * (len(lst) - 6)

【讨论】:

    猜你喜欢
    • 2022-11-26
    • 1970-01-01
    • 2020-12-10
    • 2021-01-27
    • 2013-02-27
    • 2013-11-22
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多