Python 迭代动态创建的项目列表的首选方式是什么?

Python 迭代动态创建的项目列表的首选方式是什么?,python,Python,基本上,我有一些变量,我想快速遍历它 我认为有三种可能性: 使用列表 使用元组 使用隐式元组 例如: for regex in [regex_mail, regex_name]: ... for regex in (regex_mail, regex_name): ... for regex in regex_mail, regex_name: ... 是否有任何参考说明我应该使用的语法? 我看了看PEP8,但什么也没说 我知道这个问题可能看起来“主要基于观点”

基本上,我有一些变量,我想快速遍历它

我认为有三种可能性:

  • 使用列表
  • 使用元组
  • 使用隐式元组
例如:

for regex in [regex_mail, regex_name]:
    ...

for regex in (regex_mail, regex_name):
    ...

for regex in regex_mail, regex_name:
    ...
是否有任何参考说明我应该使用的语法?
我看了看PEP8,但什么也没说


我知道这个问题可能看起来“主要基于观点”,但我正在寻找具体的论据,这些论据可能允许我选择最适合的风格(PEP20指出“最好只有一种方法可以做到”)。

首先,这3种语法之间的任何性能差异都可能可以忽略不计

然后,这很好地描述了列表和元组之间的差异:

元组是异构数据结构(即,它们的条目具有 不同的含义),而列表是同质序列。多元组 有结构,列表有顺序

通常的例子是GPS坐标的集合。使用元组分隔
X
Y
Z
,使用列表分隔坐标:

[(48.77, 9.18, 400), (48.77, 9.185, 405), (48.77, 9.19, 410)]

根据这一理念,在您的案例中应使用列表。

所示的第二个和第三个示例完全相同。只有在优先级有要求的情况下,元组才需要括号。逗号构成元组,而不是括号。通常一个元组比一个列表更有效。可能的重复:我的2美分:这并不重要。但对命名变量进行迭代的愿望通常是一种代码气味:它表明数据可能属于给定了有意义名称的集合数据结构(或iterable对象),而不是原子变量;它是同质的,它的基数并不重要。我经常发现,想象一种静态类型的语言来进行比较是很有帮助的——在Haskell中,你可以用一个列表来编写它,如
traverse\u(\ regex->)[regex\u-mail,regex\u-name]
(对于元组来说,使用泛型或透镜也需要一些努力)。