用于动态关键点迭代的python列表与元组
假设我有需要迭代的组件,例如“From”和“to”。为了方便起见,我可以迭代这些字符串,但我不需要将它们存储任何长时间,因为我只需要执行一次。在这个例子中使用列表或元组会更好吗用于动态关键点迭代的python列表与元组,python,Python,假设我有需要迭代的组件,例如“From”和“to”。为了方便起见,我可以迭代这些字符串,但我不需要将它们存储任何长时间,因为我只需要执行一次。在这个例子中使用列表或元组会更好吗 info = {} for type in ('from', 'to'): info[type] = fetch(type); 请注意,如果元组更改为列表,则上述操作将完全相同;我想知道是否有一些偏好。如果您不打算对其进行更改,我认为元组应用得更好。我只在需要对集合执行动态操作(如追加、减法等)时使用列表 另外,
info = {}
for type in ('from', 'to'):
info[type] = fetch(type);
请注意,如果元组更改为列表,则上述操作将完全相同;我想知道是否有一些偏好。如果您不打算对其进行更改,我认为元组应用得更好。我只在需要对集合执行动态操作(如追加、减法等)时使用列表
另外,在大多数情况下,访问元组的速度更快。也就是说,在做出决定之前,您应该始终测试您的特定用例。元组最有可能表现得更好,因为它们是不可变的。反汇编还表明,元组使用的操作码更少:
2 0 SETUP_LOOP 14 (to 17)
3 LOAD_CONST 3 (('a', 'b'))
6 GET_ITER
vs
不过,这并不重要,如果这一点性能很重要,那么您应该编写C或汇编代码。元组显然在内存中更小,创建速度更快,但如果有1或2个项,我无法想象在99.99%的情况下它会有什么影响。在这种情况下,元组可能比列表更好,但您也可以这样做
for item in a, b:
process(item)
我想知道在这种情况下到底发生了什么:p
编辑:翻译为:
3 LOAD_CONST 3 (('a', 'b'))
这似乎是一个元组…如果我正确理解了你的问题,你在问在这种情况下最惯用的用法是什么。(性能和内存效率在这里几乎不重要,因为您说过您只做一次。) 答案是,在Python存在的大部分时间里,人们倾向于使用元组作为一次性常量进行迭代,这主要是因为习惯于在无意对其进行变异时使用不可变的东西 [编辑:去掉了一些与布景无关的东西。我太想把它塞进答案中,而实际上它并没有起到作用。]
请注意,有时会有少数人坚持这个名单。其基本原理是列表最初被认为是Python的“数组”类型,而元组是“记录”类型。也就是说,列表用于保存单一类型的多个对象(如测试分数的集合),而元组用于保存任意相关对象(如姓名、地址和电话号码)。严格遵守这一点现在已经有点过时和古怪了。这可能会提供信息:这只是一个稍微不同的sintax来表示问题已经存在的元组。元组不是像许多人认为的那样由
()
创建的,而是由,
-但是,没有()
这只会让人困惑。@ThiefMaster您是否建议在创建元组时始终使用()
,以避免歧义?您对我的问题的理解完全正确。为什么在这个例子中,set-literal语法比tuple更受欢迎(我认为它也更难看)?@tandu:对不起,在这个例子中,它实际上不会。我从我的答案中删去了那些材料,因为事实上,这既没有多大意义,也不是惯例。(人们喜欢使用集合文字,而他们传统上使用元组是为了测试一个小的、恒定的值集合中的成员身份。)
3 LOAD_CONST 3 (('a', 'b'))