通过 3 个简单步骤检查 Python 中列表的长度

本文将探讨几种简单易行的方法来确定列表的长度,并深入分析哪种方法更为高效。

何为Python列表?

列表是Python中一种强大的数据结构,它本质上是一个有序的元素集合,能够容纳多种不同的数据类型。一个列表中可以同时存储整数、浮点数、字符串、布尔值,甚至嵌套列表。

以下是一些展示不同数据类型列表的例子:

int_list = [1, 2, 3, 4, 5]
print(int_list)  # 输出:[1, 2, 3, 4, 5]

float_list = [1.1, 2.2, 3.3, 4.4, 5.5]
print(float_list) # 输出:[1.1, 2.2, 3.3, 4.4, 5.5]

string_list = ['Geekflare', 'Cloudflare', 'Amazon']
print(string_list) # 输出:['Geekflare', 'Cloudflare', 'Amazon']

boolean_list = [True, False]
print(boolean_list) # 输出:[True, False]

nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]
print(nested_list) # 输出:[[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]

different_datatype_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
print(different_datatype_list) # 输出:[1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

Python列表的创建方式有两种:一种是使用方括号`[]`,另一种是使用`list()`构造函数。

square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
print(square_bracket_list) # 输出:[1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

constructor_list = list((1, 1.1, 'techblik.com', True, [1, 1.1, 'Geekflare', True]))
print(constructor_list) # 输出:[1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

上述代码中,`square_bracket_list`通过方括号创建,而`constructor_list`使用`list()`构造函数创建。 两种方法最终都生成相同的列表。

Python列表具有可变性,允许在其中存储重复的元素,并且可以通过索引来访问特定的元素。

查找列表长度的方法

以下列出了几种查找Python列表长度的常用方法:

  • 内置函数 `len()`
  • 运算符模块中的 `length_hint` 方法
  • 自定义函数和计数器

方法一:使用内置函数 `len()`

len() 是Python的内置函数,用于计算列表的长度,以及其他可迭代对象(如集合、元组、字典等)的元素数量。

以下是使用 len() 函数的示例代码:

languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = len(languages)
print('列表的长度为: ', languages_length)

输出结果为:

列表的长度为:  5

如果您还没有安装Python环境,也可以使用在线的Python编译器来运行上述代码。

方法二:使用运算符模块的 `length_hint` 方法

length_hint 方法可以返回可迭代对象(如列表、集合、元组、字典等)的长度。它存在于Python的 operator 模块中,并非一个直接可用的内置函数。

以下是使用 length_hint 方法的示例代码:

import operator

languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = operator.length_hint(languages)
print('使用 operator 的 length_hint 方法计算列表长度: ', languages_length)

输出结果为:

使用 operator 的 length_hint 方法计算列表长度:  5

方法三:使用自定义函数和计数器

这种方法是通过传统的循环方式来实现的。我们将使用 for 循环和一个计数器来遍历列表并计算其长度。

以下是一个自定义的函数示例,该函数接收一个可迭代对象作为参数,并返回该对象的长度:

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

以下是如何使用该自定义函数的示例代码:

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = iterable_count(languages)
print('使用自定义函数计算列表长度: ', languages_length)

输出结果为:

使用自定义函数计算列表长度:  5

分析这三种方法

下面我们将对这三种方法在大型列表和小型列表上的性能进行分析。

大型列表的性能分析:

import timeit
import operator

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

integer_list = list(range(1, 9999999))

# 使用 len() 计算长度
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, '使用 len() 计算列表长度: ',len_length)

# 使用 operator.length_hint 计算长度
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, '使用 length_hint 计算列表长度: ',len_length)

# 使用自定义函数计算长度
start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, '使用自定义函数计算列表长度: ',iterable_count_length)

输出结果为:

3.957189619541168e-06 使用 len() 计算列表长度:  9999998
3.0621886253356934e-06 使用 length_hint 计算列表长度:  9999998
0.4059128537774086 使用自定义函数计算列表长度:  9999998

从结果可以看出,当列表的数据量达到百万级别时,length_hint 方法的速度最快(3.0621886253356934e-06)。这是因为它利用了CPython运行时底层的长度提示机制,也被称为Python包装器。

小型列表的性能分析:

import timeit
import operator

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

integer_list = list(range(1, 100))

# 使用 len() 计算长度
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, '使用 len() 计算列表长度: ',len_length)

# 使用 operator.length_hint 计算长度
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, '使用 length_hint 计算列表长度: ',len_length)

# 使用自定义函数计算长度
start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, '使用自定义函数计算列表长度: ',iterable_count_length)

输出结果为:

7.813796401023865e-07 使用 len() 计算列表长度:  99
1.1278316378593445e-06 使用 length_hint 计算列表长度:  99
3.462657332420349e-06 使用自定义函数计算列表长度:  99

从结果可以看出,当列表的数据量在几千或更少时,len() 方法的速度最快 (7.813796401023865e-07)。

在两种情况下,使用自定义函数和计数器的效率都低于其他两种方法。

结论

本文介绍了几种在Python中检查列表长度的方法,并对它们的性能进行了分析,以便我们更好地选择最适合的方法。