gpt4 book ai didi

这个循环可能实现 Pythonic 列表理解吗?

转载 作者:太空狗 更新时间:2023-10-29 16:59:54 26 4
gpt4 key购买 nike

我对列表理解既爱又恨。一方面,我认为它们整洁优雅。另一方面,我讨厌阅读它们。 (尤其是那些我没有写的)我通常遵循以下规则,在需要速度之前使其可读。所以在这一点上我的问题真的很学术。

我想要一个表格中的电台列表,该表格的字符串通常有额外的空格。我需要去掉那些空格。有时这些站是空白的,不应包括在内。

stations = []
for row in data:
if row.strip():
stations.append(row.strip())

这转化为这个列表理解:

stations = [row.strip() for row in data if row.strip()]

这很好用,但我突然想到我正在做两次脱衣舞。我猜 .strip() 并不是真的需要两次,而且通常比仅仅分配一个变量要慢。

stations = []
for row in data:
blah = row.strip()
if blah:
stations.append(blah)

事实证明我是对的。

> Striptwice list comp 14.5714301669     
> Striptwice loop 17.9919670399
> Striponce loop 13.0950567955

Timeit 显示在两个循环段之间,第二个(剥离一次)更快。这里没有真正的惊喜。令我惊讶的是,即使执行了两次 strip 操作,列表理解速度也只是稍微慢了一点。

我的问题:有没有一种方法可以编写只执行一次 strip 的列表理解?



结果:

这里是建议的时间结果

# @JonClements & @ErikAllik
> Striptonce list comp 10.7998494348
# @adhie
> Mapmethod loop 14.4501044569

最佳答案

有 - 首先创建一个剥离字符串的生成器,然后使用它:

stations = [row for row in (row.strip() for row in data) if row]

你也可以在没有 comp 的情况下编写它,例如(交换到 imap 并删除 list 用于 Python 2.x):

stations = list(filter(None, map(str.strip, data)))

关于这个循环可能实现 Pythonic 列表理解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19185128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com