无缝处理可迭代和不可迭代

发布于 2024-09-02 02:07:17 字数 179 浏览 6 评论 0原文

您能告诉我如何优化以下代码吗?

def f(y, list_or_elem):
  if getattr(list_or_elem, '__iter__'):
    y = max(y, *list_or_elem)
  else:
    y = max(y, list_or_elem)

Could you let me know how I can optimize the following code?

def f(y, list_or_elem):
  if getattr(list_or_elem, '__iter__'):
    y = max(y, *list_or_elem)
  else:
    y = max(y, list_or_elem)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

摘星┃星的人 2024-09-09 02:07:17

最好的优化是避免将“列表或单个元素”作为参数这样的愚蠢行为。但是,如果您坚持,最好使用 try/ except 尽快删除异常并确保可迭代:

try: iter(list_or_elem)
except TypeError: iterable = [list_or_elem]
else: iterable = list_or_elem
y = max(y, *iterable)

The best optimization of all would be to avoid such silliness as taking "either a list or a single element" as an argument. But, if you insist, it's better to use a try/except to remove the anomaly ASAP and make what's sure to be an iterable:

try: iter(list_or_elem)
except TypeError: iterable = [list_or_elem]
else: iterable = list_or_elem
y = max(y, *iterable)
〆一缕阳光ご 2024-09-09 02:07:17

如果您愿意在代码中添加展平功能(有一个很好的 这里)基本上可以获取列表列表的列表...并将其简化为单个列表,您可以执行类似的操作

y = max(flatten([y, list_or_elem]))

if you are willing to have add flatten function in your code (theres a good one here) which can basically take a list of lists of lists of... and bring it down to a single list, you can do something like

y = max(flatten([y, list_or_elem]))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文