Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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,我有一个只有一项的列表。我知道这个列表只有一项,因为它是MySQL查询的输出,总是只有一个结果 MySQL查询: SELECT MAX(date) FROM db.table; 列出结果: ['20170307'] 现在我必须访问此列表中的项目。我有两个选择: 1) 按职位划分 max_date = list[0] print(max_date) 2) 通过迭代项目来进行 有人能解释一下哪种方法在性能、可读性和总体最佳实践方面更合适吗?当我使用方法#2时,我的IDE会发出一个危险信号,但是

我有一个只有一项的列表。我知道这个列表只有一项,因为它是MySQL查询的输出,总是只有一个结果

MySQL查询:

SELECT MAX(date) FROM db.table;
列出结果:

['20170307']
现在我必须访问此列表中的项目。我有两个选择:

1) 按职位划分

max_date = list[0]
print(max_date)
2) 通过迭代项目来进行


有人能解释一下哪种方法在性能、可读性和总体最佳实践方面更合适吗?当我使用方法#2时,我的IDE会发出一个危险信号,但是如果我确信我的列表将始终有一个项目,那么是否可以安全地忽略它?

理想情况下,使用“按位置”样式会起作用,因为您只需要列表的第一个元素。仅通过阅读代码,for循环就给我留下了列表中不止一个元素的印象,理想情况下,使用by position样式是可行的,因为您只需要列表中的第一个元素。仅通过阅读代码,for循环就给我留下了列表中不止一个元素的印象

我将使用第三个选项,序列解包语法:

max_date, = list
注意逗号。如果
列表
实际上不是长度为1的序列,则这会引发异常


就速度而言,
list[0]
几乎肯定运行得最快。

我会使用第三个选项,序列解包语法:

max_date, = list
注意逗号。如果
列表
实际上不是长度为1的序列,则这会引发异常

就速度而言,
list[0]
几乎肯定运行得最快。

“list”是一个保留关键字。不要将其用作变量名,否则会导致行为不规则。如果您确实希望安全,可以执行以下操作:

if len(list1) == 1:
    max_item = list1[0]
print(max_item)
“列表”是一个保留关键字。不要将其用作变量名,否则会导致行为不规则。如果您确实希望安全,可以执行以下操作:

if len(list1) == 1:
    max_item = list1[0]
print(max_item)

大多数语言的索引访问速度非常快。您还可以使用Python中的自动解包:

try:
    first, = list_with_len_1
except ValueError:
    first = None

大多数语言的索引访问速度非常快。您还可以使用Python中的自动解包:

try:
    first, = list_with_len_1
except ValueError:
    first = None

这类问题可能会吸引基于意见的答案。也就是说,
somelist[0]
没有问题。检查长度是否有错误,但使用索引位置,甚至使用元组解包:
max\u date,=somelist
,这是一个意见问题,应该关闭。就我个人而言,我更喜欢
somelist[len(“]”中的[x代表x)]
你为什么要问迭代列表的正确方法?为什么您会从迭代的角度来考虑这个问题,并从迭代的角度来选择一个初始实现?这种问题很可能会吸引基于观点的答案。也就是说,
somelist[0]
没有问题。检查长度是否有错误,但使用索引位置,甚至使用元组解包:
max\u date,=somelist
,这是一个意见问题,应该关闭。就我个人而言,我更喜欢
somelist[len(“]”中的[x代表x)]
你为什么要问迭代列表的正确方法?为什么您会从迭代的角度考虑这个问题,并从迭代的角度选择一个初始实现呢?实际上,至少在CPython上,序列解包更快(在Py2.7.12和3.5.2上测试);索引包括加载列表和索引,然后执行下标操作,即使在
二进制子序列CR
上有
列表
的快速路径,下标操作仍比单个
解包序列
指令运行得慢。对于没有下标快速路径的非
列表
序列,解包的成功率甚至更高。实际上,至少在CPython上,序列解包更快(在Py2.7.12和3.5.2上测试);索引包括加载列表和索引,然后执行下标操作,即使在
二进制子序列CR
上有
列表
的快速路径,下标操作仍比单个
解包序列
指令运行得慢。对于没有下标快速路径的非
list
序列,解包将赢得更多。要明确的是,
list
既不是保留的,也不是关键字(如果是,则不能将其用作变量名)。您不应该将其用作变量名,因为这样做会隐藏
list
构造函数,从而使您无法在当前(以及更深入的嵌套)范围内使用它。要明确的是,
list
既不是保留的,也不是关键字(如果是,则不能将其用作变量名)。您不应该将它用作变量名,因为这样做会隐藏
列表
构造函数,从而使您无法在当前(以及更深入嵌套的)范围中使用它。