Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于动态关键点迭代的python列表与元组_Python - Fatal编程技术网

用于动态关键点迭代的python列表与元组

用于动态关键点迭代的python列表与元组,python,Python,假设我有需要迭代的组件,例如“From”和“to”。为了方便起见,我可以迭代这些字符串,但我不需要将它们存储任何长时间,因为我只需要执行一次。在这个例子中使用列表或元组会更好吗 info = {} for type in ('from', 'to'): info[type] = fetch(type); 请注意,如果元组更改为列表,则上述操作将完全相同;我想知道是否有一些偏好。如果您不打算对其进行更改,我认为元组应用得更好。我只在需要对集合执行动态操作(如追加、减法等)时使用列表 另外,

假设我有需要迭代的组件,例如“From”和“to”。为了方便起见,我可以迭代这些字符串,但我不需要将它们存储任何长时间,因为我只需要执行一次。在这个例子中使用列表或元组会更好吗

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'))