首页 > 编程问答 >如何计算任意可迭代对象(例如生成器)中的项目数量?

如何计算任意可迭代对象(例如生成器)中的项目数量?

时间:2024-08-01 08:29:03浏览次数:6  
标签:python iterator generator iterable

假设我有一个任意的可迭代对象 - 例如,一个迭代文件行和 yield 匹配正则表达式的生成器。

我如何计算该可迭代对象中的项目数,假设我不这样做不关心元素本身?


可以使用 sum() 函数来计算可迭代对象中的元素数量,而无需存储它们。 以下是如何操作:

def count_items(iterable):
  """计算可迭代对象中的项目数量。

  Args:
    iterable: 要计算其大小的可迭代对象。

  Returns:
    iterable 中的项目数。
  """
  return sum(1 for _ in iterable)

此代码的工作原理如下:

  1. 创建一个生成器表达式: 1 for _ in iterable
  2. 此表达式遍历给定的 iterable
  3. 对于 iterable 中的每个元素,它都会生成值 1 _ 用于表示我们不关心实际元素,而只关心它们的计数。

  4. 使用 sum() 计算总和: sum(1 for _ in iterable)

  5. sum() 函数接受一个可迭代对象并将所有元素相加。
  6. 在这种情况下,它会对生成器表达式产生的所有 1 求和,有效地计算了元素的数量。

示例用法:

# 使用生成器
my_generator = (x**2 for x in range(1, 11))
count = count_items(my_generator)
print(f"生成器中的元素数量:{count}")  # 输出:10

# 使用列表
my_list = [2, 4, 6, 8, 10]
count = count_items(my_list)
print(f"列表中的元素数量:{count}")  # 输出:5

优点:

  • 内存效率高: 此方法不需要将所有元素存储在内存中,这使得它成为处理大型可迭代对象的理想选择。
  • 适用于任何可迭代对象: 它适用于生成器、列表、元组以及任何可以迭代的对象。

注意: 如果可迭代对象是无限的,则此方法将永远运行。

标签:python,iterator,generator,iterable
From: 5384570

相关文章

  • 跟踪 VScode 中的 python 警告
    我想知道哪一行代码导致我的代码中引发警告。可以在VScode中实现吗?例如,我在终端中看到警告:目前,我只能看到在python终端中引发警告的导入模块,但我无法将其跟踪到代码的确切行,只能跟踪到该行导入模块的。也许,可以在警告上添加断点或更改某些设置,或使用扩展?以下......
  • ffmpeg python 导致死锁
    我在使用ffmpegpython处理相机帧时遇到问题。我使用process.communicate()的第一种方法效果很好,但存在延迟问题。process=(ffmpeg.input('pipe:',format='rawvideo',pix_fmt='rgb24',s='{}x{}'.format(width,height))......
  • 将 HTTP 分块编码数据流代码片段从 Node.js 转换为 Python
    我有一个Node.js客户端代码,它将请求发送到HTTP服务器,然后连续接收分块编码数据。这是带有一些流量数据输出的Node.js代码。consthttp=require('http');constoptions={hostname:'...',path:'...',port:...,...};constreq=http.request(......
  • vsc python 调试器和 pylance 无法识别已安装的包
    我最近使用snowflake-connector-python在我的虚拟环境中安装了pipinstallsnowflake-connector-python[pandas]==2.7.6,当我在激活虚拟环境的情况下从命令行运行我的脚本时,它工作正常。我设置了与VSC解释器相同的虚拟环境,但尝试运行python调试器会引发异常......
  • 如何从python读取matlab持续时间对象
    我创建一个matlab持续时间对象并将其保存到.mat文件:timeend=seconds(123);save('time.mat',timeend,'-v7.3');然后我从python读取它:withh5py.File('time.mat','r')asf:var=f['timeend'][:]print(list(var))......
  • 通过 python 连接到 Snowflake 时出错“UnpicklingError: invalid load key, '\x00'
    我在使用snowflake.connector.connect通过python连接到snowflake时遇到以下错误importsnowflake.connector#pipinstallsnowflake-connector-python#iamgettingtheenvfrom.envfileistoredlocallycnx=snowflake.connector.connect(user=os.getenv('USER'),pass......
  • Python Selenium 单击 webdriverwait 与 find_element
    我无法理解这两个代码块之间的区别。发送点击在webdriverwait和find_elements中都有效。代码1fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.suppo......
  • Python 问题 如何创建在 PDF 中注册为剪切线的专色?
    我正在开发一个项目,需要我在图像周围创建一条剪切线,但在任何RIP程序(例如Versaworks或Flexi)上将其注册为实际剪切线时遇到困难。我尝试了很多不同的方法python库可以帮助解决这个问题,但我无法让它工作。我希望它像我们在Illustrator中所做的那样,创建一条名为CutConto......
  • 使用Python时如何避免`setattr`(和`getattr`)?以及是否有必要避免
    如果我想向协议缓冲区中的字段添加一个在编译时未知的值,我目前正在做setattr我通常不喜欢使用setattr,因为它看起来不太安全。但是当我知道该对象是protobuf时,我认为这很好,因为我设置它的值必须是protobuf允许的类型。所以也许它并不是真的不安全?让我举......
  • Java sshtools 生成的 EDDSA 签名与 Python 的 pycryptome 生成的签名不匹配
    我有一个python库,它使用pycryptodomelibrary使用openssh格式的ED25519私钥使用Ed25519算法对数据进行签名。然后需要使用sshtools库和相应的公钥在Java应用程序中验证签名。但是签名验证失败。约束:从文件中读取私钥/公钥很重要。我无法......